| | |
| | | trigger Repair on Repair__c (before insert, after insert, before update, after update, after delete, before delete) { |
| | | RepairHandler handler = new RepairHandler(); |
| | | handler.run(); |
| | | System.debug( '-----: trigger start'); |
| | | if ( Trigger.isBefore && Trigger.isUpdate) { |
| | | RepairTrigger.CheckUpdate(Trigger.old, Trigger.newMap); |
| | | } |
| | | |
| | | // ---------------------------------------------------------------------- |
| | | // wangweipeng 20210727 start |
| | | // 新增修理时,如果直返收货地址的信息都为空,那么就根据医院的 OCSM管理省(文本) 字段来匹配地址表里 省和市字段 |
| | | // 如果能匹配到那么默认是这条新增的修理收货地址 |
| | | // ---------------------------------------------------------------------- |
| | | if ( Trigger.isBefore && Trigger.isInsert) { |
| | | RepairBeforeInsertHandler ribt = new RepairBeforeInsertHandler(); |
| | | ribt.beforeInsertValue(Trigger.new,Trigger.old); |
| | | } |
| | | //wangweipeng 20210727 end |
| | | |
| | | if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isAfter && Trigger.isDelete)) { |
| | | NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // ここより、修理のサービスコントラクト項目を自動的に更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | if (Trigger.isBefore && (Trigger.isInsert || Trigger.isUpdate)) { |
| | | //先款后修-修理增加先款标识 thh 20220318 start |
| | | RepairTrigger.AdvancePaymentFlagUpsert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | //先款后修-修理增加先款标识 thh 20220318 end |
| | | |
| | | // 納入機器IDを一意に格納する Setです。 |
| | | Set<ID> assetIds = new Set<Id>(); |
| | | |
| | | // 納入機器の一意のIDを得る |
| | | for ( Repair__c repair : Trigger.New) { |
| | | if (String.isBlank(repair.Delivered_Product__c) == false) assetIds.add( repair.Delivered_Product__c); |
| | | if(Test.isRunningTest()||UserInfo.getUserId()!=System.Label.ByPassTrigger){ |
| | | RepairHandler handler = new RepairHandler(); |
| | | handler.run(); |
| | | System.debug( '-----: trigger start'); |
| | | test(); |
| | | if ( Trigger.isBefore && Trigger.isUpdate) { |
| | | RepairTrigger.CheckUpdate(Trigger.old, Trigger.newMap); |
| | | } |
| | | |
| | | // 有効なサービス契約の Mapを得る |
| | | // arg1は納入機器のID, arg2は納入機器のIDのサービス契約一覧 |
| | | // 区分虚拟维修合同和正常维修合同 |
| | | // 正常维修合同保有设备集合 |
| | | Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContracts = new Map<Id, List<Maintenance_Contract_Asset__c>>(); |
| | | // 虚拟维修合同保有设备集合 |
| | | Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContractsVM = new Map<Id, List<Maintenance_Contract_Asset__c>>(); |
| | | List<Maintenance_Contract_Asset__c> contracts = OncallFinalStatusManager.selectMaintenance_Contract_Asset_List(assetIds); |
| | | for (Maintenance_Contract_Asset__c local : contracts) { |
| | | if (local.Maintenance_Contract__r.RecordType.DeveloperName == 'VM_Contract') { |
| | | List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(local.Asset__c); |
| | | if (middleTableVMList == null) { |
| | | middleTableVMList = new List<Maintenance_Contract_Asset__c>(); |
| | | effectiveContractsVM.put(local.Asset__c, middleTableVMList); |
| | | } |
| | | middleTableVMList.add(local); |
| | | } else { |
| | | List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(local.Asset__c); |
| | | if (middleTableList == null) { |
| | | middleTableList = new List<Maintenance_Contract_Asset__c>(); |
| | | effectiveContracts.put(local.Asset__c, middleTableList); |
| | | } |
| | | middleTableList.add(local); |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // wangweipeng 20210727 start |
| | | // 新增修理时,如果直返收货地址的信息都为空,那么就根据医院的 OCSM管理省(文本) 字段来匹配地址表里 省和市字段 |
| | | // 如果能匹配到那么默认是这条新增的修理收货地址 |
| | | // ---------------------------------------------------------------------- |
| | | if ( Trigger.isBefore && Trigger.isInsert) { |
| | | RepairBeforeInsertHandler ribt = new RepairBeforeInsertHandler(); |
| | | ribt.beforeInsertValue(Trigger.new,Trigger.old); |
| | | } |
| | | System.debug( '-----: 维修合同开始'); |
| | | // 本題のロジック |
| | | for ( Repair__c repair : Trigger.New) { |
| | | //add wangweipeng 2021/12/09 start |
| | | boolean defaultFlag = true; |
| | | //add wangweipeng 2021/12/09 end |
| | | // 草案中修理だけ更新 |
| | | // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start |
| | | // 判断条件追加 && repair.Exc_work_location__c == false |
| | | if(repair.Exc_work_location__c){ |
| | | defaultFlag = false; |
| | | } |
| | | // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start |
| | | //wangweipeng 20210727 end |
| | | |
| | | if ((repair.Status__c == '草案中' || String.isBlank(repair.Status__c)) == false) { |
| | | // if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null) { |
| | | if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false) { |
| | | |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | } |
| | | continue; |
| | | } |
| | | System.debug( '-----:自动带出维修合同'); |
| | | // 修理の「故障発生日」が、サービス契約の「契約開始日」〜「契約終了日」に含まれるか? |
| | | List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(repair.Delivered_Product__c); |
| | | if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isAfter && Trigger.isDelete)) { |
| | | // if(!(System.isFuture()||System.isBatch())){// Add By Lijun 20220303 to avoid mutiple execute |
| | | NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | // } |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // ここより、修理のサービスコントラクト項目を自動的に更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | if ( Trigger.isBefore && (Trigger.isInsert || Trigger.isUpdate)) { |
| | | //先款后修-修理增加先款标识 thh 20220322 start |
| | | RepairTrigger.AdvancePaymentFlagUpsert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | //先款后修-修理增加先款标识 thh 20220322 end |
| | | |
| | | Boolean needsetnull = true; |
| | | System.debug( '-----:自动带出维修合同11111' + middleTableList); |
| | | // if (middleTableList == null) { |
| | | if (middleTableList == null && repair.Exc_work_location__c == false) { |
| | | if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') |
| | | && (repair.Sales_Branch__c != repair.Finance_of_Branch__c) && repair.SAP_Transfer_time__c == null) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | // 納入機器IDを一意に格納する Setです。 |
| | | Set<ID> assetIds = new Set<Id>(); |
| | | |
| | | // 納入機器の一意のIDを得る |
| | | for ( Repair__c repair : Trigger.New) { |
| | | if (String.isBlank(repair.Delivered_Product__c) == false) assetIds.add( repair.Delivered_Product__c); |
| | | } |
| | | |
| | | // 有効なサービス契約の Mapを得る |
| | | // arg1は納入機器のID, arg2は納入機器のIDのサービス契約一覧 |
| | | // 区分虚拟维修合同和正常维修合同 |
| | | // 正常维修合同保有设备集合 |
| | | Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContracts = new Map<Id, List<Maintenance_Contract_Asset__c>>(); |
| | | // 虚拟维修合同保有设备集合 |
| | | Map<Id, List<Maintenance_Contract_Asset__c>> effectiveContractsVM = new Map<Id, List<Maintenance_Contract_Asset__c>>(); |
| | | List<Maintenance_Contract_Asset__c> contracts = OncallFinalStatusManager.selectMaintenance_Contract_Asset_List(assetIds); |
| | | for (Maintenance_Contract_Asset__c local : contracts) { |
| | | if (local.Maintenance_Contract__r.RecordType.DeveloperName == 'VM_Contract') { |
| | | List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(local.Asset__c); |
| | | if (middleTableVMList == null) { |
| | | middleTableVMList = new List<Maintenance_Contract_Asset__c>(); |
| | | effectiveContractsVM.put(local.Asset__c, middleTableVMList); |
| | | } |
| | | middleTableVMList.add(local); |
| | | } else { |
| | | List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(local.Asset__c); |
| | | if (middleTableList == null) { |
| | | middleTableList = new List<Maintenance_Contract_Asset__c>(); |
| | | effectiveContracts.put(local.Asset__c, middleTableList); |
| | | } |
| | | middleTableList.add(local); |
| | | } |
| | | } |
| | | if (middleTableList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableList) { |
| | | if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.Maintenance_Contract__r.Contract_Start_Date__c |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.Maintenance_Contract__r.Contract_End_Date__c |
| | | && middleTable != null |
| | | && middleTable.Maintenance_Contract__r.Status__c == '契約' |
| | | && middleTable.Maintenance_Contract__r.Contract_Start_Date__c != null |
| | | && middleTable.Maintenance_Contract__r.Contract_End_Date__c != null |
| | | ) { |
| | | //限次合同产品信息维护相关 FXK 2021/03/05 Start |
| | | //1.如果记录类型是维修合同 或者 记录类型是服务任务但不是URF限次合同,保持现状 |
| | | //如果最大大修次数大于0,并且已经大修次数 小于 最大大修次数,那么保持现状 |
| | | if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'Maintenance_Contract' |
| | | || (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' |
| | | && (middleTable.Maintenance_Contract__r.URF_Contract__c != true |
| | | || (middleTable.Maintenance_Contract__r.URF_Contract__c == true |
| | | && (middleTable.Series_MaxRepairCount_F__c > 0 |
| | | && middleTable.Series_RepairCount_F__c < middleTable.Series_MaxRepairCount_F__c))))) { |
| | | repair.Maintenance_Contract__c = middleTable.Maintenance_Contract__c; |
| | | // repair.Contract_Principal_Office__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; |
| | | // system.debug('555555:' + middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c); |
| | | // system.debug('mmmmmmmm:' + Trigger.isInsert); |
| | | // system.debug('nnnnnnn:' + Trigger.isUpdate); |
| | | repair.repairPlace__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; |
| | | //新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 Start |
| | | //wangweipeng 发生数据到SAP以后,修理的维修中心不能做修改 |
| | | // if(repair.SAP_Transfer_time__c == null){ |
| | | if(repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false){ |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); |
| | | System.debug( '-----: 维修合同开始'); |
| | | // 本題のロジック |
| | | for ( Repair__c repair : Trigger.New) { |
| | | //add wangweipeng 2021/12/09 start |
| | | boolean defaultFlag = true; |
| | | //add wangweipeng 2021/12/09 end |
| | | // 草案中修理だけ更新 |
| | | // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start |
| | | // 判断条件追加 && repair.Exc_work_location__c == false |
| | | if(repair.Exc_work_location__c){ |
| | | defaultFlag = false; |
| | | } |
| | | // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start |
| | | |
| | | if ((repair.Status__c == '草案中' || String.isBlank(repair.Status__c)) == false) { |
| | | // if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null) { |
| | | if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false) { |
| | | |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | } |
| | | continue; |
| | | } |
| | | System.debug( '-----:自动带出维修合同'); |
| | | // 修理の「故障発生日」が、サービス契約の「契約開始日」〜「契約終了日」に含まれるか? |
| | | List<Maintenance_Contract_Asset__c> middleTableList = effectiveContracts.get(repair.Delivered_Product__c); |
| | | |
| | | Boolean needsetnull = true; |
| | | System.debug( '-----:自动带出维修合同11111' + middleTableList); |
| | | // if (middleTableList == null) { |
| | | if (middleTableList == null && repair.Exc_work_location__c == false) { |
| | | if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') |
| | | && (repair.Sales_Branch__c != repair.Finance_of_Branch__c) && repair.SAP_Transfer_time__c == null) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | } |
| | | } |
| | | if (middleTableList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableList) { |
| | | if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.Maintenance_Contract__r.Contract_Start_Date__c |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.Maintenance_Contract__r.Contract_End_Date__c |
| | | && middleTable != null |
| | | && middleTable.Maintenance_Contract__r.Status__c == '契約' |
| | | && middleTable.Maintenance_Contract__r.Contract_Start_Date__c != null |
| | | && middleTable.Maintenance_Contract__r.Contract_End_Date__c != null |
| | | ) { |
| | | //限次合同产品信息维护相关 FXK 2021/03/05 Start |
| | | //1.如果记录类型是维修合同 或者 记录类型是服务任务但不是URF限次合同,保持现状 |
| | | //如果最大大修次数大于0,并且已经大修次数 小于 最大大修次数,那么保持现状 |
| | | if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'Maintenance_Contract' |
| | | || (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' |
| | | && (middleTable.Maintenance_Contract__r.URF_Contract__c != true |
| | | || (middleTable.Maintenance_Contract__r.URF_Contract__c == true |
| | | && (middleTable.Series_MaxRepairCount_F__c > 0 |
| | | && middleTable.Series_RepairCount_F__c < middleTable.Series_MaxRepairCount_F__c))))) { |
| | | repair.Maintenance_Contract__c = middleTable.Maintenance_Contract__c; |
| | | // repair.Contract_Principal_Office__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; |
| | | // system.debug('555555:' + middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c); |
| | | // system.debug('mmmmmmmm:' + Trigger.isInsert); |
| | | // system.debug('nnnnnnn:' + Trigger.isUpdate); |
| | | repair.repairPlace__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; |
| | | //新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 Start |
| | | //wangweipeng 发生数据到SAP以后,修理的维修中心不能做修改 |
| | | // if(repair.SAP_Transfer_time__c == null){ |
| | | if(repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false){ |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); |
| | | defaultFlag = false; |
| | | } |
| | | // 新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 End |
| | | // HWAG-BJABEY LHJ 2019/12/04 Start |
| | | repair.MaintenanceContractType__c = middleTable.Maintenance_Contract__r.RecordType.Name; |
| | | // HWAG-BJABEY LHJ 2019/12/04 End |
| | | } |
| | | //2.如果记录类型是服务任务并且是URF限次合同,如果最大大修次数为0或者空,那么直接add Error报错 让联系服务管理部; |
| | | if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' |
| | | && middleTable.Maintenance_Contract__r.URF_Contract__c == true) { |
| | | if (middleTable.Series_MaxRepairCount_F__c == 0 || middleTable.Series_MaxRepairCount_F__c == null) { |
| | | //直接add Error报错 让联系服务管理部 |
| | | repair.addError('修理设备不是限次设备,请联系服务管理部'); |
| | | } |
| | | //如果最大大修次数大于0,并且已经大修次数 大于或等于 最大大修次数,那么不仅不赋值维修合同信息,而且清空当前信息 |
| | | if (middleTable.Series_MaxRepairCount_F__c > 0 && middleTable.Series_RepairCount_F__c >= middleTable.Series_MaxRepairCount_F__c) { |
| | | //不赋值维修合同信息,而且清空当前信息 |
| | | repair.Maintenance_Contract__c = null; |
| | | repair.MaintenanceContractType__c = null; |
| | | } |
| | | } |
| | | //限次合同产品信息维护相关 FXK 2021/03/05 END |
| | | needsetnull = false; |
| | | System.debug( '-----:自动带出维修合同22222');//把保有设备上的维修合同存到修理上 |
| | | break; |
| | | } |
| | | } |
| | | //MaintenanceContractType__c:维修合同记录类型 |
| | | /*如果不在合同中,则将1.‘修理’中的‘维修合同’和‘修理’中的‘维修合同记录类型’清空*/ |
| | | if (needsetnull) { |
| | | System.debug( '-----:nullにせよ'); |
| | | repair.Maintenance_Contract__c = null; |
| | | repair.MaintenanceContractType__c = null; |
| | | } |
| | | |
| | | System.debug( '-----: repair=' + repair); |
| | | System.debug( '-----: repair.Maintenance_Contract__c=' + repair.Maintenance_Contract__c); |
| | | System.debug( '-----: repair.SERVICE_CONTRACT_JUDEGE_DAY__C=' + repair.SERVICE_CONTRACT_JUDEGE_DAY__C); |
| | | // 设备修理时,自动带出虚拟维修合同 |
| | | List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(repair.Delivered_Product__c); |
| | | // Boolean needsetnull = true; |
| | | System.debug( '-----:自动带出虚拟维修合同'); |
| | | System.debug( '-----:自动带出虚拟维修合同' + middleTableVMList); |
| | | // if (middleTableVMList == null) { |
| | | if (middleTableVMList == null && repair.Exc_work_location__c == false) { |
| | | if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') |
| | | && (repair.Sales_Branch__c != repair.Finance_of_Branch__c)) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | } |
| | | } |
| | | if (middleTableVMList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableVMList) { |
| | | if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.startDateGurantee_Text__c |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.endDateGurantee_Text__c |
| | | && middleTable != null |
| | | && middleTable.Maintenance_Contract__r.Status__c == '契約' |
| | | && middleTable.startDateGurantee_Text__c != null |
| | | && middleTable.endDateGurantee_Text__c != null |
| | | ) { |
| | | repair.VM_Maintenance_Contract__c = middleTable.Maintenance_Contract__c; |
| | | needsetnull = false; |
| | | //新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 Start |
| | | // if (repair.VM_Maintenance_Contract__c != null) { |
| | | if (repair.VM_Maintenance_Contract__c != null && repair.Exc_work_location__c == false) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); |
| | | defaultFlag = false; |
| | | } |
| | | // 新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 End |
| | | // HWAG-BJABEY LHJ 2019/12/04 Start |
| | | repair.MaintenanceContractType__c = middleTable.Maintenance_Contract__r.RecordType.Name; |
| | | // HWAG-BJABEY LHJ 2019/12/04 End |
| | | // 新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 End |
| | | break; |
| | | } |
| | | //2.如果记录类型是服务任务并且是URF限次合同,如果最大大修次数为0或者空,那么直接add Error报错 让联系服务管理部; |
| | | if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' |
| | | && middleTable.Maintenance_Contract__r.URF_Contract__c == true) { |
| | | if (middleTable.Series_MaxRepairCount_F__c == 0 || middleTable.Series_MaxRepairCount_F__c == null) { |
| | | //直接add Error报错 让联系服务管理部 |
| | | repair.addError('修理设备不是限次设备,请联系服务管理部'); |
| | | } |
| | | //如果最大大修次数大于0,并且已经大修次数 大于或等于 最大大修次数,那么不仅不赋值维修合同信息,而且清空当前信息 |
| | | if (middleTable.Series_MaxRepairCount_F__c > 0 && middleTable.Series_RepairCount_F__c >= middleTable.Series_MaxRepairCount_F__c) { |
| | | //不赋值维修合同信息,而且清空当前信息 |
| | | repair.Maintenance_Contract__c = null; |
| | | repair.MaintenanceContractType__c = null; |
| | | } |
| | | } |
| | | if (needsetnull) { |
| | | System.debug( '-----:nullにせよ'); |
| | | repair.VM_Maintenance_Contract__c = null; |
| | | } |
| | | |
| | | //add wangweipeng 2021/12/10 start |
| | | if(defaultFlag){ |
| | | //一般修理品的维修中心赋值逻辑 |
| | | //SAP上传修理时间 |
| | | if(repair.SAP_Transfer_time__c == null){ |
| | | if(repair.On_site_repair__c == 'RC修理'||repair.On_site_repair__c== '直送SORC修理'||repair.On_site_repair__c== '直送OGZ修理' ){ |
| | | System.debug('-----------------11------'); |
| | | repair = RepairTrigger.generalUpdateWorkLocationSelect(repair); |
| | | } |
| | | //限次合同产品信息维护相关 FXK 2021/03/05 END |
| | | needsetnull = false; |
| | | System.debug( '-----:自动带出维修合同22222');//把保有设备上的维修合同存到修理上 |
| | | break; |
| | | } |
| | | } |
| | | //MaintenanceContractType__c:维修合同记录类型 |
| | | /*如果不在合同中,则将1.‘修理’中的‘维修合同’和‘修理’中的‘维修合同记录类型’清空*/ |
| | | if (needsetnull) { |
| | | System.debug( '-----:nullにせよ'); |
| | | repair.Maintenance_Contract__c = null; |
| | | repair.MaintenanceContractType__c = null; |
| | | //add wangweipeng 2021/12/10 end |
| | | } |
| | | |
| | | System.debug( '-----: repair=' + repair); |
| | | System.debug( '-----: repair.Maintenance_Contract__c=' + repair.Maintenance_Contract__c); |
| | | System.debug( '-----: repair.SERVICE_CONTRACT_JUDEGE_DAY__C=' + repair.SERVICE_CONTRACT_JUDEGE_DAY__C); |
| | | // 设备修理时,自动带出虚拟维修合同 |
| | | List<Maintenance_Contract_Asset__c> middleTableVMList = effectiveContractsVM.get(repair.Delivered_Product__c); |
| | | // Boolean needsetnull = true; |
| | | System.debug( '-----:自动带出虚拟维修合同'); |
| | | System.debug( '-----:自动带出虚拟维修合同' + middleTableVMList); |
| | | // if (middleTableVMList == null) { |
| | | if (middleTableVMList == null && repair.Exc_work_location__c == false) { |
| | | if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' |
| | | || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') |
| | | && (repair.Sales_Branch__c != repair.Finance_of_Branch__c)) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, null); |
| | | defaultFlag = false; |
| | | } |
| | | } |
| | | if (middleTableVMList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableVMList) { |
| | | if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.startDateGurantee_Text__c |
| | | && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.endDateGurantee_Text__c |
| | | && middleTable != null |
| | | && middleTable.Maintenance_Contract__r.Status__c == '契約' |
| | | && middleTable.startDateGurantee_Text__c != null |
| | | && middleTable.endDateGurantee_Text__c != null |
| | | ) { |
| | | repair.VM_Maintenance_Contract__c = middleTable.Maintenance_Contract__c; |
| | | needsetnull = false; |
| | | //新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 Start |
| | | // if (repair.VM_Maintenance_Contract__c != null) { |
| | | if (repair.VM_Maintenance_Contract__c != null && repair.Exc_work_location__c == false) { |
| | | repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); |
| | | defaultFlag = false; |
| | | } |
| | | // 新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 End |
| | | break; |
| | | } |
| | | } |
| | | if (needsetnull) { |
| | | System.debug( '-----:nullにせよ'); |
| | | repair.VM_Maintenance_Contract__c = null; |
| | | } |
| | | System.debug( '-----: 维修合同结束'); |
| | | |
| | | //add wangweipeng 2021/12/10 start |
| | | if(defaultFlag){ |
| | | //一般修理品的维修中心赋值逻辑 |
| | | //SAP上传修理时间 |
| | | if(repair.SAP_Transfer_time__c == null){ |
| | | if(repair.On_site_repair__c == 'RC修理'||repair.On_site_repair__c== '直送SORC修理'||repair.On_site_repair__c== '直送OGZ修理' ){ |
| | | System.debug('-----------------11------'); |
| | | repair = RepairTrigger.generalUpdateWorkLocationSelect(repair); |
| | | } |
| | | } |
| | | } |
| | | //add wangweipeng 2021/12/10 end |
| | | } |
| | | |
| | | System.debug( '-----: 维修合同结束'); |
| | | |
| | | // 20160727 add 计算修理工作日 |
| | | RepairTrigger.setRepairWorkday(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | // |
| | | if (Trigger.isUpdate) { |
| | | /****************************************************************************************************/ |
| | | //迁移进程生成器中repair Alltime功能 Start |
| | | /****************************************************************************************************/ |
| | | for (Repair__c a : Trigger.new) { |
| | | String StatusStr = ''; |
| | | if (a.Delete_Flag__c == true) { |
| | | StatusStr = '0.删除'; |
| | | } else if (a.RepairOrderStatusCode__c == 'A99' && a.IncorrectDataComment__c != null) { |
| | | StatusStr = '0.删除'; |
| | | } else if ((a.RepairOrderStatusCode__c == 'A95' || a.RepairOrderStatusCode__c == 'A96') |
| | | && a.Return_Without_Repair_IF__c == true) { |
| | | StatusStr = '0.取消'; |
| | | } else if (a.Finish_Check__c == 1) { |
| | | StatusStr = '5.完毕'; |
| | | } else if (a.Facility_Return_Receipt_Collection_Date__c != null |
| | | || a.Repair_Returned_To_HP_Date__c != null |
| | | || a.Repair_Shipped_Date__c != null) { |
| | | StatusStr = '4.修理品返送阶段'; |
| | | } else if (a.Repair_Final_Inspection_Date__c != null |
| | | || a.Repair_Completed_Date__c != null |
| | | || a.Repair_Start_Date__c != null) { |
| | | StatusStr = '3.维修阶段'; |
| | | } else if (a.Agreed_Date__c != null |
| | | || a.Repair_Discount_Date__c != null |
| | | || a.Repair_Estimated_Date__c != null |
| | | || a.Repair_Inspection_Date__c != null) { |
| | | StatusStr = '2.维修报价阶段'; |
| | | } else { |
| | | StatusStr = a.Status__c; |
| | | } |
| | | |
| | | a.Status__c = a.Status1__c; |
| | | // DOJ2.1 gzw AwareDate公式考文本 start |
| | | if (a.AwareDate__c != a.Aware_date__c && |
| | | (a.Aware_date__c >= Date.newInstance(2021, 9, 1) || |
| | | a.AwareDate__c >= Date.newInstance(2021, 9, 1) )) { |
| | | a.Aware_date__c = a.AwareDate__c; |
| | | } |
| | | // DOJ2.1 gzw AwareDate公式考文本 end |
| | | |
| | | // 20160727 add 计算修理工作日 |
| | | RepairTrigger.setRepairWorkday(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); |
| | | // |
| | | if (Trigger.isUpdate) { |
| | | /****************************************************************************************************/ |
| | | //迁移进程生成器中repair Alltime功能 End |
| | | //迁移进程生成器中repair Alltime功能 Start |
| | | /****************************************************************************************************/ |
| | | for (Repair__c a : Trigger.new) { |
| | | String StatusStr = ''; |
| | | if (a.Delete_Flag__c == true) { |
| | | StatusStr = '0.删除'; |
| | | } else if (a.RepairOrderStatusCode__c == 'A99' && a.IncorrectDataComment__c != null) { |
| | | StatusStr = '0.删除'; |
| | | } else if ((a.RepairOrderStatusCode__c == 'A95' || a.RepairOrderStatusCode__c == 'A96') |
| | | && a.Return_Without_Repair_IF__c == true) { |
| | | StatusStr = '0.取消'; |
| | | } else if (a.Finish_Check__c == 1) { |
| | | StatusStr = '5.完毕'; |
| | | } else if (a.Facility_Return_Receipt_Collection_Date__c != null |
| | | || a.Repair_Returned_To_HP_Date__c != null |
| | | || a.Repair_Shipped_Date__c != null) { |
| | | StatusStr = '4.修理品返送阶段'; |
| | | } else if (a.Repair_Final_Inspection_Date__c != null |
| | | || a.Repair_Completed_Date__c != null |
| | | || a.Repair_Start_Date__c != null) { |
| | | StatusStr = '3.维修阶段'; |
| | | } else if (a.Agreed_Date__c != null |
| | | || a.Repair_Discount_Date__c != null |
| | | || a.Repair_Estimated_Date__c != null |
| | | || a.Repair_Inspection_Date__c != null) { |
| | | StatusStr = '2.维修报价阶段'; |
| | | } else { |
| | | StatusStr = a.Status__c; |
| | | } |
| | | |
| | | a.Status__c = a.Status1__c; |
| | | // DOJ2.1 gzw AwareDate公式考文本 start |
| | | if (a.AwareDate__c != a.Aware_date__c && |
| | | (a.Aware_date__c >= Date.newInstance(2021, 9, 1) || |
| | | a.AwareDate__c >= Date.newInstance(2021, 9, 1) )) { |
| | | a.Aware_date__c = a.AwareDate__c; |
| | | } |
| | | // DOJ2.1 gzw AwareDate公式考文本 end |
| | | |
| | | /****************************************************************************************************/ |
| | | //迁移进程生成器中repair Alltime功能 End |
| | | /****************************************************************************************************/ |
| | | } |
| | | } |
| | | } |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、サービスコントラクト項目を自動的に更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、サービスコントラクト項目を自動的に更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | // ---------------------------------------------------------------------- |
| | | // これより、On-Callの「On-Call跟进结果」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | if ( ( Trigger.isBefore && ( Trigger.isInsert || Trigger.isUpdate)) || ( Trigger.isAfter && Trigger.isDelete)) { |
| | | // ---------------------------------------------------------------------- |
| | | // これより、On-Callの「On-Call跟进结果」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | // 処理対象となる修理を全部確保 |
| | | List<Repair__c> repairs = ( Trigger.isBefore ? Trigger.New : new List<Repair__c>()); |
| | | Set<Id> cncallIds = new Set<Id>(); |
| | | for ( Repair__c repair : ( Trigger.isBefore ? Trigger.New : Trigger.Old)) { |
| | | if (String.isBlank(repair.On_Call_ID__c) == false) { |
| | | cncallIds.add( repair.On_Call_ID__c); |
| | | if ( ( Trigger.isBefore && ( Trigger.isInsert || Trigger.isUpdate)) || ( Trigger.isAfter && Trigger.isDelete)) { |
| | | |
| | | // 処理対象となる修理を全部確保 |
| | | List<Repair__c> repairs = ( Trigger.isBefore ? Trigger.New : new List<Repair__c>()); |
| | | Set<Id> cncallIds = new Set<Id>(); |
| | | for ( Repair__c repair : ( Trigger.isBefore ? Trigger.New : Trigger.Old)) { |
| | | if (String.isBlank(repair.On_Call_ID__c) == false) { |
| | | cncallIds.add( repair.On_Call_ID__c); |
| | | } |
| | | } |
| | | |
| | | // 処理対象となるオンコールを全部確保 |
| | | |
| | | // 20210622 SQL优化 Start |
| | | // List<On_Call__c> oncalls = OncallFinalStatusManager.getOncallList(cncallIds); |
| | | List<On_Call__c> oncalls = new List<On_Call__c>(); |
| | | if (cncallIds.size() > 0 ) { |
| | | oncalls = OncallFinalStatusManager.getOncallList(cncallIds); |
| | | } |
| | | // 20210622 SQL优化 End |
| | | |
| | | if (oncalls.size() > 0) { |
| | | // 処理対象となるQISを全部確保 |
| | | List<QIS_Report__c> qiss = OncallFinalStatusManager.getQisListFronOncalls(oncalls); |
| | | |
| | | // FinalStatus更新処理 |
| | | OncallFinalStatusManager.setFinalStatus( oncalls, repairs, qiss); |
| | | |
| | | OncallFinalStatusManager.updOncalls(oncalls); |
| | | } |
| | | } |
| | | |
| | | // 処理対象となるオンコールを全部確保 |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、On-Callの「On-Call跟进结果」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | // 20210622 SQL优化 Start |
| | | // List<On_Call__c> oncalls = OncallFinalStatusManager.getOncallList(cncallIds); |
| | | List<On_Call__c> oncalls = new List<On_Call__c>(); |
| | | if (cncallIds.size() > 0 ) { |
| | | oncalls = OncallFinalStatusManager.getOncallList(cncallIds); |
| | | } |
| | | // 20210622 SQL优化 End |
| | | |
| | | if (oncalls.size() > 0) { |
| | | // 処理対象となるQISを全部確保 |
| | | List<QIS_Report__c> qiss = OncallFinalStatusManager.getQisListFronOncalls(oncalls); |
| | | |
| | | // FinalStatus更新処理 |
| | | OncallFinalStatusManager.setFinalStatus( oncalls, repairs, qiss); |
| | | |
| | | OncallFinalStatusManager.updOncalls(oncalls); |
| | | } |
| | | } |
| | | |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、On-Callの「On-Call跟进结果」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | // ---------------------------------------------------------------------- |
| | | // これより、备品借出申请の「修理最终检测日」を更新するロジック(更新后触发WorkFlow) |
| | | // ---------------------------------------------------------------------- |
| | | if (Trigger.isAfter && Trigger.isUpdate) { |
| | | Map<String, Date> repairDateMap = new Map<String, Date>(); |
| | | List<String> targetRepairList = new List<String>(); |
| | | for (Repair__c repair : Trigger.New) { |
| | | Repair__c oldRepair = Trigger.OldMap.get(repair.Id); |
| | | if (oldRepair.Repair_Final_Inspection_Date__c != repair.Repair_Final_Inspection_Date__c) { |
| | | repairDateMap.put(repair.Id, repair.Repair_Final_Inspection_Date__c); |
| | | targetRepairList.add(repair.Id); |
| | | // ---------------------------------------------------------------------- |
| | | // これより、备品借出申请の「修理最终检测日」を更新するロジック(更新后触发WorkFlow) |
| | | // ---------------------------------------------------------------------- |
| | | if (Trigger.isAfter && Trigger.isUpdate) { |
| | | Map<String, Date> repairDateMap = new Map<String, Date>(); |
| | | List<String> targetRepairList = new List<String>(); |
| | | for (Repair__c repair : Trigger.New) { |
| | | Repair__c oldRepair = Trigger.OldMap.get(repair.Id); |
| | | if (oldRepair.Repair_Final_Inspection_Date__c != repair.Repair_Final_Inspection_Date__c) { |
| | | repairDateMap.put(repair.Id, repair.Repair_Final_Inspection_Date__c); |
| | | targetRepairList.add(repair.Id); |
| | | } |
| | | } |
| | | // 20210622 SQL优化 Start |
| | | //List<Rental_Apply__c> raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; |
| | | List<Rental_Apply__c> raList = new List<Rental_Apply__c>(); |
| | | if (targetRepairList.size() > 0) { |
| | | raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; |
| | | } |
| | | // 20210622 SQL优化 End |
| | | for (Rental_Apply__c ra : raList) { |
| | | ra.Repair_Final_Inspection_Date__c = repairDateMap.get(ra.Repair__c); |
| | | } |
| | | if (raList.size() > 0) { |
| | | update raList; |
| | | } |
| | | } |
| | | // 20210622 SQL优化 Start |
| | | //List<Rental_Apply__c> raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; |
| | | List<Rental_Apply__c> raList = new List<Rental_Apply__c>(); |
| | | if (targetRepairList.size() > 0) { |
| | | raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; |
| | | } |
| | | // 20210622 SQL优化 End |
| | | for (Rental_Apply__c ra : raList) { |
| | | ra.Repair_Final_Inspection_Date__c = repairDateMap.get(ra.Repair__c); |
| | | } |
| | | if (raList.size() > 0) { |
| | | update raList; |
| | | } |
| | | } |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、备品借出申请の「修理最终检测日」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | // ---------------------------------------------------------------------- |
| | | // ここまで、备品借出申请の「修理最终检测日」を更新するロジック |
| | | // ---------------------------------------------------------------------- |
| | | |
| | | System.debug( '-----: trigger end'); |
| | | System.debug( '-----: trigger end'); |
| | | } |
| | | public void test(){ |
| | | Integer i =0; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | |
| | | } |
| | | } |