@isTest
private class UpdateGastroscopyBatchTest {
	@isTest static void test_method_one() {
		
		Oly_TriggerHandler.bypass('AssetHandlerCheck');

		Profile p = [select Id from Profile where id =:System.Label.ProfileId_SystemAdmin];
		User MacOwner = new User(Test_staff__c = true, LastName = 'hp1', FirstName = 'owner1', Alias = 'hp', CommunityNickname = 'hpOwner1', Email = 'olympus_hpowner@sunbridge.com',Job_Category__c = '销售服务', Username = 'olympus_hpowner@sunbridge.com1', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId = p.id);
		insert MacOwner;

		Account hospital = new Account();
		hospital.recordtypeId =Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('HP').getRecordTypeId();
		hospital.Name = 'test hospita/l';
		insert hospital;

		// 戦略科室を得る
		List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];

		// 診療科を作る
		Account dep = new Account();
		dep.recordtypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('Department_GI').getRecordTypeId();
		dep.Name = 'test de/p';
		dep.ParentId = strategicDep[0].Id;
		dep.Department_Class__c = strategicDep[0].Id;
		dep.Hospital__c = hospital.Id;
		insert dep;

		// 产品表1
		List<Product2> pro2List=new List<Product2>();
		Product2 product1 = new Product2();
		product1.Name='テスト商品';
		product1.Maintenance_Price_Year__c = 12000;
		product1.Manual_Entry__c = false;
		product1.IsActive=true;
		product1.Family='GF';
		product1.Fixture_Model_No__c='n01';
		product1.Serial_Lot_No__c='S/N tracing';
		product1.Fixture_Model_No_T__c = 'n01';
		product1.ProductCode_Ext__c='pc01';
		product1.Category4__c='GF';

		Product2 product2 =product1.clone();
		product2.Name='BF产品';
		product2.Category4__c='BF';
		product2.Fixture_Model_No_T__c = 'n02';
		product2.ProductCode_Ext__c='pc02';

		Product2 product3 =product1.clone();
		product3.Name='其他产品';
		product3.Category4__c='CV';
		product3.Fixture_Model_No_T__c = 'n03';
		product3.ProductCode_Ext__c='pc03';

		insert new List<Product2> {product1,product2,product3};

		List<Product2> productList=[select id,Category4__c from Product2 WHERE Id = :product2.Id];
		system.debug('productList等于'+productList);
		system.assertEquals('BF', productList[0].Category4__c);
		// 维修合同を作成する
		// List<String> mc_TypeInfo=new List<String> {'Maintenance_Contract','NewMaintenance_Contract','VM_Contract'};
		Maintenance_Contract__c mc1 = new Maintenance_Contract__c();
		mc1.Contract_Conclusion_Date__c=Date.today().addDays( -10);
		mc1.Name = 'tect mc1';
		mc1.Hospital__c = hospital.Id;
		mc1.Department_Class__c = strategicDep[0].Id;
		mc1.Department__c = dep.Id;
		mc1.Service_Contract_Staff__c = MacOwner.Id;
		mc1.Payment_Plan_Sum_First__c = 1;
		mc1.Status__c = '契約';
		mc1.Maintenance_Contract_No__c = '1113';
		mc1.Not_Upper_limit_reason__c = '1';
		// mc1.recordtypeId =Schema.SObjectType.Maintenance_Contract__c.getRecordTypeInfosByDeveloperName().get('Maintenance_Contract').getRecordTypeId();
		mc1.recordtypeId =Schema.SObjectType.Maintenance_Contract__c.getRecordTypeInfosByDeveloperName().get('NewMaintenance_Contract').getRecordTypeId();
		mc1.Contract_Start_Date__c = Date.today().addDays( -10);
		mc1.Contract_End_Date__c = Date.today().addDays( 5);
		mc1.SalesOfficeCode_selection__c = '北京RC';

		Maintenance_Contract__c mc2=mc1.clone();
		mc2.Name = 'tect mc2';
		mc2.Maintenance_Contract_No__c = '11132';
		mc2.recordtypeId = Schema.SObjectType.Maintenance_Contract__c.getRecordTypeInfosByDeveloperName().get('Maintenance_Contract').getRecordTypeId();
		insert new list<Maintenance_Contract__c> {mc1,mc2};

		Maintenance_Contract_Estimate__c contactEsti1 = new Maintenance_Contract_Estimate__c(
			Name = 'contract estimate 1',
			RecordtypeId =
				Schema.SObjectType.Maintenance_Contract_Estimate__c.getRecordTypeInfosByDeveloperName().get('NewMaintenance_Quote').getRecordTypeId(),
			Contract_Esti_Start_Date__c = Date.today(),
			Contract_Range__c = 2,
			Maintenance_Contract__c = mc1.Id,
			Asset_Sum_Price__c = 1000,
			mainTalksTime__c = 1,
			talksStartDate__c = date.today(),
			Discount_reason__c ='1',
			Improve_ConsumptionRate_Idea__c = '1',
			NewEstimation_Amount__c = 100
			);
		insert contactEsti1;
		mc1.Estimation_Id__c = contactEsti1.id;
		update mc1;

		// 保有设备1
		Asset aset1=new Asset();
		aset1.RecordTypeId = System.Label.Asset_RecordType;
		aset1.SerialNumber = 'ass1';
		aset1.Name = 'ass1';
		aset1.AccountId = dep.Id;
		aset1.Department_Class__c = strategicDep[0].Id;
		aset1.Hospital__c = hospital.Id;
		aset1.Product2Id = product1.Id;
		aset1.Quantity = 1;
		aset1.Status = '有库存';
		aset1.Manage_type__c = '个体管理';
		aset1.Loaner_accsessary__c = false;
		aset1.Out_of_wh__c = 0;
		aset1.Salesdepartment__c = '1.华北营业本部';
		aset1.Internal_asset_location__c = '北京 备品中心';
		aset1.Product_category__c = 'GI';
		aset1.Equipment_Type__c = '产品试用';
		aset1.SalesProvince__c = '北京';
		aset1.CurrentContract__c = mc1.Id;
		aset1.CurrentContract_Asset_Price__c = 0;

		Asset aset2=aset1.clone();
		aset2.SerialNumber='ass2';
		aset2.Name = 'ass2';
		Asset aset3=aset1.clone();
		aset3.SerialNumber='ass3';
		aset3.Name = 'ass3';
		Asset aset4=aset1.clone();
		aset4.SerialNumber='ass4';
		aset4.Name = 'ass4';
		Asset aset5=aset1.clone();
		aset5.SerialNumber='ass5';
		aset5.Name = 'ass5';
		Asset aset6=aset1.clone();
		aset6.SerialNumber='ass6';
		aset6.Name = 'ass6';
		Asset aset7=aset1.clone();
		aset7.SerialNumber='ass7';
		aset7.Name = 'ass7';
		aset7.Product2Id = product2.Id;
		Asset aset8=aset1.clone();
		aset8.SerialNumber='ass8';
		aset8.Name = 'ass8';
		aset8.Product2Id = product3.Id;
		Asset aset9=aset1.clone();
		aset9.SerialNumber='ass9';
		aset9.Name = 'ass9';
		// Asset aset10=aset1.clone();
		// aset10.SerialNumber='ass10';
		// aset10.Name = 'ass10';
		// Asset aset11=aset1.clone();
		// aset11.SerialNumber='ass11';
		// aset11.Name = 'ass11';
		// Asset aset12=aset1.clone();
		// aset12.SerialNumber='ass12';
		// aset12.Name = 'ass12';
		insert new list<Asset> {aset1,aset2,aset3,aset4,aset5,aset6,aset7,aset8,aset9 /*,aset10,aset11,aset12*/};


		List<Asset> asetList1=[select id,Category4_Text__c,Category4__c,Status,Equipment_Type__c from Asset];
		system.debug('asetList1等于'+asetList1);

		List<String> CategoryAdd=new List<String>();
		CategoryAdd.add('GF');
		CategoryAdd.add('URF');
		CategoryAdd.add('HD EndoEYE');
		CategoryAdd.add('附属品');
		CategoryAdd.add('2mm');
		CategoryAdd.add('LF');
		CategoryAdd.add('BF');
		CategoryAdd.add('CV');
		CategoryAdd.add('其他镜种');
		for (Integer i = 0; i < asetList1.size(); i++) {
			asetList1[i].Category4_Text__c=CategoryAdd[i];
			update asetList1;
		}
		List<Asset> asetList2=[select id,Category4_Text__c,Category4__c,Status,Equipment_Type__c from Asset];
		system.debug('asetList等于'+asetList2);
		// 添加时不能更改，现 给保有设备分类赋值


		Maintenance_Contract_Asset_Estimate__c mcae1 = new Maintenance_Contract_Asset_Estimate__c();
		mcae1.Asset__c = aset1.Id;
		mcae1.Maintenance_Contract_Estimate__c = contactEsti1.Id;
		mcae1.ifHaveleftInPrevious__c = true;
		mcae1.Estimate_List_Price__c = 1000;
		mcae1.Check_Result__c = 'OK';
		insert mcae1;

		// 维修合同/保有设备1
		Maintenance_Contract_Asset__c mca1 = new Maintenance_Contract_Asset__c();
		mca1.Asset__c = aset1.Id;
		mca1.Maintenance_Contract__c = mc1.Id;
		mca1.Estimate_List_Price_All_Manual__c = 1000;
		mca1.Maintenance_Contract_Asset_Estimate__c = mcae1.id;
		// GF扇扫
		Maintenance_Contract_Asset__c mca2 = mca1.clone();
		// URF
		Maintenance_Contract_Asset__c mca3 = mca1.clone();
		mca3.Asset__c=aset2.id;
		mca3.Maintenance_Contract__c = mc2.Id;
		Maintenance_Contract_Asset__c mca4 = mca1.clone();
		mca4.Asset__c=aset2.id;
		mca4.Maintenance_Contract__c = mc2.Id;
		// HD EndoEYE
		Maintenance_Contract_Asset__c mca5 = mca1.clone();
		mca5.Asset__c=aset3.id;
		Maintenance_Contract_Asset__c mca6 = mca1.clone();
		mca6.Asset__c=aset3.id;
		// 附属品
		Maintenance_Contract_Asset__c mca7 = mca1.clone();
		mca7.Asset__c=aset4.id;
		Maintenance_Contract_Asset__c mca8 = mca1.clone();
		mca8.Asset__c=aset4.id;
		// 2mm
		Maintenance_Contract_Asset__c mca9 = mca1.clone();
		mca9.Asset__c=aset5.id;
		Maintenance_Contract_Asset__c mca10 = mca1.clone();
		mca10.Asset__c=aset5.id;
		// LF
		Maintenance_Contract_Asset__c mca11 = mca1.clone();
		mca11.Asset__c=aset6.id;
		Maintenance_Contract_Asset__c mca12 = mca1.clone();
		mca12.Asset__c=aset6.id;
		// BF
		Maintenance_Contract_Asset__c mca13 = mca1.clone();
		mca13.Asset__c=aset7.id;
		mca13.Maintenance_Contract__c = mc2.Id;
		Maintenance_Contract_Asset__c mca14 = mca1.clone();
		mca14.Asset__c=aset7.id;
		mca14.Maintenance_Contract__c = mc2.Id;
		Maintenance_Contract_Asset__c mca141 = mca1.clone();
		mca141.Asset__c=aset7.id;
		// CV
		Maintenance_Contract_Asset__c mca15 = mca1.clone();
		mca15.Asset__c=aset8.id;
		Maintenance_Contract_Asset__c mca16 = mca1.clone();
		mca16.Asset__c=aset8.id;
		mca16.Maintenance_Contract__c = mc2.Id;
		Maintenance_Contract_Asset__c mca161 = mca1.clone();
		mca161.Asset__c=aset8.id;
		// 其他镜种
		mca16.Maintenance_Contract__c = mc2.Id;
		Maintenance_Contract_Asset__c mca17 = mca1.clone();
		mca17.Asset__c=aset9.id;
		Maintenance_Contract_Asset__c mca18 = mca1.clone();
		mca18.Asset__c=aset9.id;


		// Maintenance_Contract_Asset__c mca19 = mca1.clone();
		// mca19.Asset__c=aset10.id;
		// Maintenance_Contract_Asset__c mca20 = mca1.clone();
		// mca20.Asset__c=aset10.id;
		// Maintenance_Contract_Asset__c mca21 = mca1.clone();
		// mca21.Asset__c=aset11.id;
		// Maintenance_Contract_Asset__c mca22 = mca1.clone();
		// mca22.Asset__c=aset11.id;
		// Maintenance_Contract_Asset__c mca23 = mca1.clone();
		// mca23.Asset__c=aset12.id;
		// Maintenance_Contract_Asset__c mca24 = mca1.clone();
		// mca24.Asset__c=aset12.id;
		insert new list<Maintenance_Contract_Asset__c> {mca1,mca2,mca3,mca4,mca5,mca6,mca7,mca8,mca9,mca10,mca11,mca12,mca13,mca14,mca15,mca16,mca17,mca18 /*,mca19,mca20,mca21,mca22,mca23,mca24 */};

		Repair__c repair01 = new Repair__c();
		repair01.Account__c = dep.Id;
		repair01.Department_Class__c = strategicDep[0].Id;
		repair01.Hospital__c = hospital.Id;
		repair01.Dealer__c = dep.Id;
		repair01.Delivered_Product__c = aset1.Id;
		repair01.SERVICE_CONTRACT_JUDEGE_DAY__C = Date.today().addDays( -1);
		repair01.Failure_Occurrence_Date__c = Date.today().addDays( -2);
		repair01.Maintenance_Contract__c=mc1.id;
		repair01.Repair_Rank__c='AW';
		
		Repair__c repair02 = repair01.clone();
		repair02.Maintenance_Contract__c=mc2.id;
		
		Repair__c repair03 = repair01.clone();
		repair03.Delivered_Product__c=aset7.Id;

		Repair__c repair04 = repair01.clone();
		repair04.Maintenance_Contract__c=mc2.id;
		repair04.Delivered_Product__c=aset7.Id;

		Repair__c repair05 = repair01.clone();
		repair05.Delivered_Product__c=aset8.Id;

		Repair__c repair06 = repair01.clone();
		repair06.Maintenance_Contract__c=mc2.id;
		repair06.Delivered_Product__c=aset8.Id;

		insert new List<Repair__c> {repair01,repair02,repair03,repair04,repair05,repair06};

		Database.executeBatch(new UpdateGastroscopyBatch(),200);

		List<String> conIds =new List<String>();
		conIds.add(String.valueOf(mc1.Id));
		Database.executeBatch(new UpdateGastroscopyBatch(conIds),200);
	}
}