高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public with sharing class OFSRepairConsignPDFOuterController {
    public Repair__c rp { get; private set; }
    
    public string signStr { get; set; }
    
    public void init() {
        String id = ApexPages.currentPage().getParameters().get('id');
        rp = this.getReportData(id);
    }
    
    public void saveSign() {
        // Sign画像は一つでいいじゃない?Delete⇒Insertにする
        List<Attachment> atts = [select Id from Attachment where ParentId = :rp.Id and Name = :(rp.Name + '_Sign')];
        if (atts.size() > 0) delete atts;
        
        Attachment ac = new Attachment();
        ac.Body = EncodingUtil.base64Decode(this.signStr.removeStart('data:image/png;base64,'));
        ac.Name = rp.Name + '_Sign';
        ac.ParentId = rp.Id;
        ac.ContentType = 'jpg';
        try {
            insert ac;
            rp.Sign__c = '<img src="/servlet/servlet.FileDownload?file=' + ac.Id + '"/>';
            rp.SignUrl__c = '/servlet/servlet.FileDownload?file=' + ac.Id;
            rp.SignDate__c = Date.today();
            update rp;
        } catch (Exception ex) {
            ApexPages.addMessages(ex);
            //return;
        }
    }
    
    public void savePDF() {
        String pdfPageURL = '/apex/OFSRepairConsignPDF?id=' + rp.Id;
        PageReference pageRef = new PageReference(pdfPageURL);
 
        Attachment att = new Attachment();
        // TODO TestMethodはgetContentをサポートしない
        if (!Test.isRunningTest()) {
            att.body = pageRef.getContent();
        } else {
            att.body = EncodingUtil.base64Decode('test');
        }
        att.Name = rp.Name + '_维修委托书_' + String.valueOf(Datetime.now()) + '.pdf';
        att.ParentId = rp.Id;
        try {
            insert att;
        } catch (Exception ex) {
            ApexPages.addMessages(ex);
            //return;
        }
    }
    
    private Repair__c getReportData(String id) {
        Schema.DescribeSobjectResult d = Repair__c.sObjectType.getDescribe();
        Map<String, Schema.SObjectField> fieldMap = d.fields.getMap();
        
        String soql = 'select ';
        String fields = '';
        for (String field : fieldMap.keySet()) {
            if (fields.length() > 0) {
                fields += ', ';
            }
            fields += field;
        }
        soql += fields;
        soql += ' from Repair__c where Id = \'' + id + '\'';
        
        return Database.query(soql);
    }
}