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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
@isTest
private class UpdateAssetToCurrentMCWebServiceTest {
public static Account company ;
    public final Integer N_ASSET = 10; //納入機器数
    public final Integer N_CONTRACT = 5; //契約数
    
    static Asset createAsset() {
        List<RecordType> rectCo = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        if (rectCo.size() == 0) {
            return null;
        }
        List<RecordType> rectSct = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 呼吸科'];
        if (rectSct.size() == 0) {
            return null;
        }
        List<RecordType> rectDpt = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        if (rectDpt.size() == 0) {
            return null;
        }
 
        // テストデータ
        company = new Account();
        company.RecordTypeId = rectCo[0].Id;
        company.Name         = 'HistoryTestCompany';
        upsert company;
        Account section = new Account();
        section.RecordTypeId = rectSct[0].Id;
        section.Name         = '*';
        section.Department_Class_Label__c = '消化科';
        section.ParentId                  = company.Id;
        section.Hospital_Department_Class__c = company.Id;
        upsert section;
        Account depart = new Account();
        depart.RecordTypeId = rectDpt[0].Id;
        depart.Name         = '*';
        depart.Department_Name__c  = 'HistoryTestDepart';
        depart.ParentId            = section.Id;
        depart.Department_Class__c = section.Id;
        depart.Hospital__c         = company.Id;
        upsert depart;
        // 再取得
        List<Id> accountIds = new Id[] {company.Id, section.Id, depart.Id};
        // List<Account> accList = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Id In :accountIds order by Management_Code_Auto__c];
        List<Account> accList = [select Management_Code__c, Name, Id from Account where Id In :accountIds];
 
        List<Product2> prdList = new List<Product2>();
        Product2 prd1 = new Product2();
        prd1.ProductCode_Ext__c     = 'HistoryPrd1';
        prd1.ProductCode            = 'HistoryPrd1';
        prd1.Repair_Product_Code__c = 'HistoryPrd1_RP';
        prd1.Name                   = 'HistoryPrd1';
        prd1.Manual_Entry__c        = false;
        prdList.add(prd1);
        Product2 prd2 = new Product2();
        prd2.ProductCode_Ext__c     = 'HistoryPrd2';
        prd2.ProductCode            = 'HistoryPrd2';
        prd2.Repair_Product_Code__c = 'HistoryPrd2_RP';
        prd2.Name                   = 'HistoryPrd2';
        prd2.Manual_Entry__c        = false;
        prdList.add(prd2);
        insert prdList;
 
        Asset ast = new Asset();
        ast.Name                   = 'HistoryAst1';
        ast.AccountId              = depart.Id;
        ast.Department_Class__c    = section.Id;
        ast.Hospital__c            = company.Id;
        ast.Product2Id             = prd1.Id;
        ast.SerialNumber           = 'HistorySerialNumber';
        ast.Guarantee_period_for_products__c = Date.today();
        ast.InstallDate                      = Date.today();
        insert ast;
        // ast = [select Id, CurrencyIsoCode, Name, Product_Serial_No__c, AccountId, Department_Class__c, Department_Class__r.Management_Code_Auto__c, Hospital__c, Product2Id, Product2.ProductCode, Product2.Repair_Product_Code__c, SerialNumber 
        //          from Asset
        //         where Id = :ast.Id];
        ast = [select Id, CurrencyIsoCode, Name, Product_Serial_No__c, AccountId, Department_Class__c,  Hospital__c, Product2Id, Product2.ProductCode, Product2.Repair_Product_Code__c, SerialNumber 
        from Asset
       where Id = :ast.Id];
 
        return ast;
    }
    
    
    static Maintenance_Contract__c creatContract(Asset a, Date endDate, Date startDate, String mcNo ){
        Maintenance_Contract__c crt = new Maintenance_Contract__c();
        crt.Past_update_contract__c = true;
        crt.Name = startDate.format() + endDate.format();
        crt.Department__c = a.AccountId;
        crt.Department_Class__c = a.Department_Class__c;
        crt.Hospital__c = a.Hospital__c;
        crt.Sales_Estimate_Money__c = 3000;
        crt.Closing_Prediction_Day__c = Date.today();
        crt.CurrencyIsoCode = a.CurrencyIsoCode;
        crt.Status__c = '契約';
        crt.Maintenance_Contract_No__c = mcNo;
        crt.Contract_Conclusion_Date__c = Date.today();
        crt.Contract_End_Date__c = endDate;
        crt.Contract_Start_Date__c = startDate;
        crt.SalesOfficeCode_selection__c = '北京RC';
        insert crt;
        crt = [select Id, Contract_End_Date__c
                from Maintenance_Contract__c
                where Id = :crt.Id];
        return crt;
        
    }
    
    static Maintenance_Contract_Asset__c creatMca(Asset a, Maintenance_Contract__c crt){
        Maintenance_Contract_Asset__c newMca = new Maintenance_Contract_Asset__c();
        
        newMca.Asset__c = a.Id;
        newMca.Maintenance_Contract__c = crt.Id;
        insert newMca;
        newMca = [select Id, Asset__c, Maintenance_Contract__c
                  from Maintenance_Contract_Asset__c
                  where Id =: newMca.Id];
        return newMca;
    }
    
    
    static testMethod void myUnitTest01() {
        
        Asset testAst =createAsset();
        Date TDay = Date.today();
        Date YesDay = Date.today().addDays(-1);
        Maintenance_Contract__c testCrt = creatContract(testAst,TDay.addDays(30),TDay, 'crt');
        creatMca(testAst, testCrt);
        
        Test.StartTest();
        UpdateAssetToCurrentMCWebService.UpdateAssetToCurrentMC(testAst.Id);
        Test.StopTest();
    }
}