def test_1023(): """普通委托合同创建""" # describe:开发自营房源列表中签约委托合同 # data:1、委托周期三年,三年的租金要递增;2、免租期首月;3、委托类型品牌合租;4、车位费和服务费不为0; # result:1、委托合同创建成功;2、设计工程中产生一条记录;3、委托合同应付中生成财务记录; fileName = 'houseContract_1023' hosueSql = "select h.house_code,h.build_area,sysdate(),date_ADD(date(sysdate()), interval 1 DAY),date_ADD(date(sysdate()), interval 3 YEAR),date_ADD(date(sysdate()), interval 1 MONTH) " \ "from house_rent hr INNER JOIN house h on h.house_id=hr.house_id and h.city_code=330100 and h.deleted=0 where hr.house_status='WAITING_RENT' order by rand() limit 1" if sqlbase.get_count(hosueSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % hosueSql) return contractInfo = sqlbase.serach(hosueSql) with Base() as base: base.open(page.devHousePage, houseContractPage.addHouseContractMould['edit_loc']) base.input_text( houseContractPage.houseSearchMould['residential_name_loc'], contractInfo[0]) # 输入房源编号 base.click( houseContractPage.houseSearchMould['search_button_loc']) # 搜索 base.staleness_of( houseContractPage.houseSearchMould['tr_house']) # 等待列表刷新 base.click( houseContractPage.houseSearchMould['add_house_contract_button'], index=0) # 新增委托 try: base.input_text( houseContractPage.addHouseContractMould['inside_space_loc'], contractInfo[1]) # 面积 except: base.click( houseContractPage.addHouseContractMould['newsign_button']) #新签 base.input_text( houseContractPage.addHouseContractMould['inside_space_loc'], contractInfo[1]) # 面积 base.type_select(houseContractPage.typeMould['property_type'], 'HAVECARD') # 有产证商品房 base.click( houseContractPage.addHouseContractMould['pledge_loc']) # 抵押情况 base.type_select(houseContractPage.typeMould['apartment_type'], 'BRAND') # 品牌公寓 base.type_select(houseContractPage.typeMould['reform_way'], 'OLDRESTYLE') # 老房全装 base.type_select(houseContractPage.typeMould['entrust_type'], 'SHARE') # 合租 contractNum = 'AutoTestH' + '-' + time.strftime('%m%d%H%M%S') # 定义合同编号 base.input_text( houseContractPage.addHouseContractMould['contract_num_loc'], contractNum) # 输入合同编号 base.type_select(houseContractPage.typeMould['sign_body'], 'ISZTECH') # 杭州爱上租科技有限公司 base.type_date(houseContractPage.typeMould['sign_date'], contractInfo[2]) # 签约日期 base.type_date(houseContractPage.typeMould['owner_sign_date'], contractInfo[2]) # 业主交房日期 base.type_date(houseContractPage.typeMould['fitment_start_date'], contractInfo[3]) # 装修起算日 base.type_date(houseContractPage.typeMould['fitment_end_date'], contractInfo[5]) # 装修截止日 base.type_date(houseContractPage.typeMould['entrust_start_date'], contractInfo[3]) # 委托起算日 base.type_date(houseContractPage.typeMould['entrust_end_date'], contractInfo[4]) # 委托到期日 base.type_select(houseContractPage.typeMould['freeType'], 'STARTMONTH') # 免租首月 base.type_date(houseContractPage.typeMould['first_pay_date'], contractInfo[3]) # 首次付款日 base.type_date(houseContractPage.typeMould['second_pay_date'], contractInfo[5]) # 第二次付款日 base.input_text(houseContractPage.addHouseContractMould['rent_loc'], 2000) # 租金 base.input_text(houseContractPage.addHouseContractMould['parking_loc'], 100) # 停车费 base.input_text( houseContractPage.addHouseContractMould['service_fee_loc'], 100) # 服务费 # base.type_select(base.typeMould['payment_cycle'], '半年付') 因为租金策略的机制是点击付款周期后触发,直接赋值不会触发,所以此select不直接赋值,采用点击方式 base.click(houseContractPage. addHouseContractMould['payment_cycle_loc_1']) # 付款周期 base.click(houseContractPage. addHouseContractMould['payment_cycle_loc_2']) # 月付 base.click(houseContractPage. addHouseContractMould['contract_strategy2.1_loc']) base.input_text( houseContractPage.addHouseContractMould['contract_strategy2_loc'], 2500) # 第二年租金策略 base.click(houseContractPage. addHouseContractMould['contract_strategy3.1_loc']) base.input_text( houseContractPage.addHouseContractMould['contract_strategy3_loc'], 3000) # 第三年租金策略 base.click( houseContractPage.addHouseContractMould['next_loc_1']) # 下一页 base.click( houseContractPage.addHouseContractMould['next_loc_2']) # 下一页 # 业主信息 landlordName = 'AutoTest' base.input_text( houseContractPage.addHouseContractMould['landlord_name_loc'], landlordName) base.type_select(houseContractPage.typeMould['ownerCardType'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['landlord_card_loc'], '42062119910828541X') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage.addHouseContractMould['landlord_phone_loc'], '13666666666') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage.addHouseContractMould['landlord_address_loc'], u'浙江省杭州市滨江区海创基地南楼三层') base.click(houseContractPage.addHouseContractMould['signFlag_loc']) time.sleep(0.5) # 签约人信息 base.input_text(houseContractPage.addHouseContractMould['email_loc'], '*****@*****.**') # 紧急联系人 base.input_text( houseContractPage.addHouseContractMould['emergency_name_loc'], u'紧急联系人') base.input_text( houseContractPage.addHouseContractMould['emergency_phone_loc'], '13777777777') base.type_select(houseContractPage.typeMould['emergency_card_type'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['emergency_id_card_loc'], '411722197508214014') base.input_text( houseContractPage.addHouseContractMould['emergency_address_loc'], u'浙江省杭州市滨江区海创基地北楼四层') # 收款人信息 base.type_select(houseContractPage.typeMould['account_name'], landlordName) # 收款人 # base.input_text(houseContractPage.addHouseContractMould['account_bank_loc'], u'农业银行') # base.input_text(houseContractPage.addHouseContractMould['account_num_loc'], '1234567890') # 测试环境 base.type_select(houseContractPage.typeMould['pay_object'], 'PERSONAL') # 个人 base.input_text( houseContractPage.addHouseContractMould['account_num_loc'], '123456789') base.send_keys( houseContractPage.addHouseContractMould['account_num_loc'], Keys.ENTER) # base.input_text(houseContractPage.addHouseContractMould['account_num_loc'], '1234567890') # base.send_keys(houseContractPage.addHouseContractMould['account_num_loc'], Keys.ENTER) #base.click(houseContractPage.addHouseContractMould['bank_loc']) # 收款银行 base.click( houseContractPage.addHouseContractMould['close_loc']) # 确认无误 base.input_text( houseContractPage.addHouseContractMould['account_bank_loc'], u'农业银行') #收款支行 base.click(houseContractPage.addHouseContractMould['next_loc_3']) base.click(houseContractPage.addHouseContractMould['submit_loc']) base.check_submit() # 合同生成检查 contractSql = "select * from house_contract where is_active='Y' and apartment_type='BRAND' and entrust_type='SHARE' and contract_num='%s'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractSql, 1)).is_true(), 1023, u'%s:委托合同 %s 新增失败,执行SQL:%s' % (fileName, contractNum, contractSql)) # 委托合同应付检查 payableSql = "select * from house_contract_payable hcp inner join house_contract hc on hc.contract_id=hcp.contract_id and hc.contract_num='%s' " % contractNum base.diffAssert( lambda test: asserts(sqlbase.get_count(payableSql)).is_equal_to( 36), 1023, u'%s:委托合同 %s 对应委托合同应收记录生成异常,执行SQL:%s' % (fileName, contractNum, payableSql)) # 装修设计工程检查 base.open(page.designSharePage, designSharePage.searchMould['tr_contract']) base.input_text(designSharePage.searchMould['contract_num_loc'], contractNum) base.click(designSharePage.searchMould['search_btn_loc']) base.staleness_of(designSharePage.searchMould['tr_contract']) contractNumFitment = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"contract_num\"] > div').text();return a", True).decode('utf-8') houseCodeFitment = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"house_code\"] > div').text();return a", True).decode('utf-8') base.diffAssert( lambda test: asserts(contractNumFitment).is_equal_to( contractNum.encode('utf-8')) and asserts(houseCodeFitment). is_equal_to(contractInfo[0].encode('utf-8')), 1023, u'%s:委托合同 %s 对应装修设计工程记录生成异常' % (fileName, contractNum))
def test_1047(): """修改装修成本""" # describe:在设计工程中修改房源的装修成本,对应业绩装修成本改变 # data:1、业绩审核状态为待审核;2、委托合同状态为待审核或者已初审;3、提前记录原业绩中的核算收进价和差价业绩; # result:1、新产生的业绩中核算收进价与原记录不同;2、新的差价业绩与原来的值不同; fileName = 'apartmentAchievement_1047' with Base() as base: # 创建委托合同和出租合同 houseSql = sqlbase.serach( "select house_id,residential_id,building_id,house_code from house where deleted=0 and city_code=330100 order by rand() limit 1" ) # 获取随机开发房源 houseInfo = { 'houseID': houseSql[0], 'residentialID': houseSql[1], 'buildingID': houseSql[2], 'houseCode': houseSql[3] } dateInfo = sqlbase.serach( "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 2 year),date_add(date(sysdate()),interval 27 month)," "date_add(date(sysdate()),INTERVAL 1 month),date_add(date(sysdate()),INTERVAL 6 month),date_add(date(sysdate()),INTERVAL 10 day) from dual" ) # 日期元素 apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[2], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=3000, parking=100, year_service_fee=500, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888, houseInfo=houseInfo) rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[5], # 承租6个月 deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] # 业绩检查 achievementSql = "select substring_index(aca.house_code,'-',1),aca.is_active,aca.audit_status,aca.contract_audit_status,aca.profits_fee,aca.decorate_cost from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % ( apartmentId, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementSql, 1)).is_true( ), 1047, u'%s:合同 %s 业绩生成异常' % (fileName, apartmentContractNum)) achievementInfo = sqlbase.serach(achievementSql) profits_fee_old = achievementInfo[4] # 差价业绩 decorate_cost_old = achievementInfo[5] # 装修成本 houseCode = achievementInfo[0] # 修改装修成本 base.open(page.designManageSharePage, designSharePage.searchMould['tr_contract']) base.input_text(designSharePage.searchMould['residential_name_loc'], houseCode) base.click(designSharePage.searchMould['search_btn_loc']) base.staleness_of(designSharePage.searchMould['tr_contract']) base.context_click(designSharePage.searchMould['tr_contract']) base.click(designSharePage.designShareMould['design_btn_2'], index=0) time.sleep(2) base.input_text(designSharePage.designShareMould['total_cost'], '68888.00') base.click(designSharePage.designShareMould['save_btn_2']) base.check_submit() # 获取最新的核算收进价和差价业绩 time.sleep(10) achievementInfoNew = sqlbase.serach(achievementSql) profits_fee_new = achievementInfoNew[4] # 差价业绩 decorate_cost_new = achievementInfoNew[5] # 装修成本 base.diffAssert( lambda test: asserts(decorate_cost_new).is_not_equal_to( decorate_cost_old), 1047, u'%s:出租合同 %s 对应装修成功修改后业绩中核算收进价异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, decorate_cost_old, decorate_cost_new)) base.diffAssert( lambda test: asserts(profits_fee_new).is_not_equal_to( profits_fee_old), 1047, u'%s:出租合同 %s 对应委托成本修改后业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_fee_old, profits_fee_new))
def test_1074(): """修改委托终止赔入违约金""" # describe:修改委托终止结算赔入违约金金额+100,违约业绩同步+100 # data:1、委托终止结算未复审;2、委托终止类型为业主违约;3、业绩状态未审核; # result:1、违约业绩比之前多100;2、分成人业绩同步变化;3、预估业绩排行榜同步更新; fileName = 'apartmentAchievement_1074' contractSql = "select contract_num,entrust_end_date,date(sysdate()) from house_contract where contract_id not in (select house_contract.contract_id from apartment ,apartment_contract ,house_contract " \ "where house_contract.contract_id=apartment.house_contract_id and apartment.house_id=apartment_contract.house_id and apartment_contract.real_due_date>NOW()) " \ "and city_code = 330100 and audit_status = 'APPROVED'and contract_status = 'EFFECTIVE' and deleted = 0 and entrust_end_date>NOW() order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机委托合同 %s 做业主违约终止' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage. searchMould['contract_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click( houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.wait_element( houseContractEndPage.addContractEndMould['penalty_loc']) # 等待页面出现 base.type_select(houseContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 结算类型-业主违约 endNum = 'AutoHCE' + '-' + time.strftime('%m%d%H%M') base.input_text( houseContractEndPage.addContractEndMould['end_num_loc'], endNum) base.type_date(houseContractEndPage.typeMould['end_date'], contractSql[2]) # 终止日期:当天 # 结算扣款 base.input_text( houseContractEndPage.addContractEndMould['penalty_loc'], 2000) # 违约金陪入 base.input_text( houseContractEndPage.addContractEndMould['penalty_remark_loc'], u'违约金陪入') # 备注 base.input_text( houseContractEndPage.addContractEndMould['return_rent_loc'], 5000) # 返还房租 base.input_text( houseContractEndPage.addContractEndMould['return_rent_remark_loc'], u'返还房租') # 备注 base.type_date(houseContractEndPage.typeMould['receivable_date'], contractSql[2]) # 应收日期 # 打款信息 base.type_select(houseContractEndPage.typeMould['pay_type'], 'OWNER') # 打款类别-业主收款 base.input_text( houseContractEndPage.addContractEndMould['pay_name_loc'], 'AutoTest') # 姓名 base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.upload_file( houseContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( houseContractEndPage.addContractEndMould['end_image_loc']) base.click( houseContractEndPage.addContractEndMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 # 终止结算新增检查 contractEndAdd = "select hce.end_id from house_contract hc,house_contract_end hce where hc.contract_id=hce.contract_id and hc.contract_num='%s' and hce.deleted=0 " \ "and hce.audit_status='NO_AUDIT' and hce.end_type='OWNER_DEFAULT'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1074, u'%s:委托合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 违约业绩检查 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(breachAchievementSql, 1)). is_true(), 1074, u'%s:委托合同 %s 业主违约生成违约业绩异常,执行SQL:%s' % (fileName, contractNum, breachAchievementSql)) breachAchievementInfo = sqlbase.serach(breachAchievementSql) # 终止结算初审后修改违约核算金额 houseContractEndId = sqlbase.serach(contractEndAdd)[0] audit(houseContractEndId, auditType.houseContractEnd, auditStatus.chuShen) base.open( page.contractEndPage, houseContractEndPage.searchMould['contract_search_button_loc']) base.click(houseContractEndPage.addContractEndMould['tab_info'], index=1) base.input_text( houseContractEndPage.searchMould['end_contract_num_loc'], contractNum) base.click( houseContractEndPage.searchMould['end_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.searchMould['tr_contract_end']) # 等待数据刷新 base.dblclick( houseContractEndPage.searchMould['tr_contract_end'], checkLoc=houseContractEndPage.addContractEndMould['check_loc']) time.sleep(2) financial_money_new = str(float(breachAchievementInfo[1]) + 100) # base.script("$('#financial_provide_money+span>input').val('%s')" % financial_money_new) base.input_text( houseContractEndPage.addContractEndMould['financial_money_loc'], financial_money_new) base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.click(houseContractEndPage.addContractEndMould['save_loc']) # 保存 base.check_submit() # 获取修改后业绩数据 time.sleep(10) breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH'" % contractNum breachAchievementInfo = sqlbase.serach(breachAchievementSql) base.diffAssert( lambda test: asserts(breachAchievementInfo[1]).is_equal_to( financial_money_new), 1074, u'%s:委托合同 %s 违约业绩金额异常,期望值 %s 实际值 %s' % (fileName, contractNum, financial_money_new, breachAchievementInfo[1])) # base.diffAssert(lambda test: asserts(personAchievementNew).is_not_equal_to(personAchievementOld), 1074, # u'%s:委托合同 %s 业主违约修改终止合同核算业绩金额后,违约业绩分成明细异常,期望值不为 %s 实际值 %s' % (fileName, contractNum, personAchievementOld, personAchievementNew)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩同步更新到预估业绩排行榜) breahAchievementDetailSql = "select ca.receivable from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id inner join breach_achievement ba " \ "on ba.achieve_id=ca.achieve_id and ba.breach_type='HOUSE_OWNER_DEFAULT_BREACH' and ba.deleted=0 and ba.breach_num='%s' " \ "where ca.contract_category='HOUSE_OWNER_DEFAULT_BREACH' and ca.deleted=0 " % contractNum prebreachAchievement = sqlbase.serach(breahAchievementDetailSql)[0] base.diffAssert( lambda test: asserts(prebreachAchievement).is_equal_to( financial_money_new), 1074, u'%s:委托合同 %s 业主违约修改终止合同核算业绩金额后,业绩分成明细业绩金额异常,实际值 %s 期望值 %s' % (fileName, contractNum, prebreachAchievement, financial_money_new))
def test_1058(): """修改房源的装修成本""" # describe:在设计工程中修改房源的装修成本,对应业绩装修成本改变 # data:1、业绩审核状态为待审核;2、委托合同状态为待审核或者已初审;3、提前记录原业绩中的核算收进价和差价业绩; # result:1、新产生的业绩中核算收进价与原记录不同;2、新的差价业绩与原来的值不同; fileName = 'apartmentAchievement_1058' with Base() as base: # 创建委托合同和出租合同 houseSql = sqlbase.serach( "select house_id,residential_id,building_id,house_code from house where deleted=0 and city_code=330100 order by rand() limit 1" ) # 获取随机开发房源 houseInfo = { 'houseID': houseSql[0], 'residentialID': houseSql[1], 'buildingID': houseSql[2], 'houseCode': houseSql[3] } dateInfo = sqlbase.serach( "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 2 year),date_add(date(sysdate()),interval 27 month)," "date_add(date(sysdate()),INTERVAL 1 month),date_add(date(sysdate()),INTERVAL 6 month),date_add(date(sysdate()),INTERVAL 3 month) from dual" ) # 日期元素 apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[2], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=3000, parking=100, year_service_fee=500, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888, houseInfo=houseInfo) houseContractInfo = sqlbase.serach( "select hc.contract_num,hc.contract_id from house_contract hc inner join apartment a on a.house_id = hc.house_id and a.apartment_id='%s' where hc.audit_status='AUDIT' " % apartmentId) houseContractId = houseContractInfo[1] rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[5], #承租6个月 deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] apartmentContractId = apartmentContractInfo['contractID'] achievementSql = "select substring_index(house_code,'-',1) from apartment_contract_achievement where contract_num='%s'and deleted=0" % apartmentContractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementSql, 1)).is_true( ), 1058, u'%s:合同 %s 对应业绩生成异常' % (fileName, apartmentContractNum)) houseCode = sqlbase.serach(achievementSql)[0] # 委托合同审核 audit(houseContractId, auditType.houseContract, auditStatus.chuShen, auditStatus.fuShen) # 出租合同审核 audit(apartmentContractId, auditType.apartmentContract, auditStatus.chuShen, auditStatus.fuShen) # 业绩检查 achievementsqlb = "select aca.is_active,aca.audit_status,aca.contract_audit_status,aca.profits_fee,aca.decorate_cost from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0 and aca.is_active='Y'" % (apartmentId, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsqlb, 1)).is_true( ), 1058, u'%s:合同 %s 对应业绩生效异常' % (fileName, apartmentContractNum)) profits_feeOld = sqlbase.serach(achievementsqlb)[3] # 差价业绩 decorate_costOld = sqlbase.serach(achievementsqlb)[4] # 装修成本 # 获取当前的核算收进价和差价业绩并审核 base.open(page.apartmentAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.input_text( apartmentAchievementPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 base.click(apartmentAchievementPage. detailAchievementMoudle['audit_button_loc']) base.input_text( apartmentAchievementPage. detailAchievementMoudle['contract_audit_content'], 'ok') base.click(apartmentAchievementPage. detailAchievementMoudle['contract_audit_confirm']) base.check_submit() # 修改装修成本 base.open(page.designManageSharePage, designSharePage.searchMould['tr_contract']) base.input_text(designSharePage.searchMould['residential_name_loc'], houseCode) base.click(designSharePage.searchMould['search_btn_loc']) base.staleness_of(designSharePage.searchMould['tr_contract']) base.context_click(designSharePage.searchMould['tr_contract']) base.click(designSharePage.designShareMould['design_btn_2'], index=0) time.sleep(2) base.input_text(designSharePage.designShareMould['total_cost'], '68888.00') base.click(designSharePage.designShareMould['save_btn_2']) base.check_submit() # 数据库获取最新的核算收进价和差价业绩 time.sleep(10) achievementInfoSql = "select profits_fee,rent_cost,end_time,achievementRent,decorate_cost from apartment_contract_achievement where contract_num='%s' and deleted=0" % apartmentContractNum achievementInfo = sqlbase.serach(achievementInfoSql) decorate_cost = achievementInfo[4] # 装修成本 profits_fee = achievementInfo[0] # 差价业绩 base.diffAssert( lambda test: asserts(decorate_cost).is_equal_to(decorate_costOld), 1058, u'%s:出租合同 %s 业绩对应委托成本修改后已审核业绩中核算收进价异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, decorate_costOld, decorate_cost)) base.diffAssert( lambda test: asserts(profits_fee).is_equal_to(profits_feeOld), 1058, u'%s:出租合同 %s 业绩对应委托成本修改后已审核业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_feeOld, profits_fee))
def test_1089(): """出租违约业绩删除""" # describe:出租违约业绩生成后删除终止结算,未审核的违约业绩会删除,同步到预估业绩排行榜 # data:1、业绩状态未审核;2、终止结算未复审; # result:1、违约业绩删除;2、预估业绩排行榜中业绩删除; fileName = 'apartmentAchievement_1089' contractSql = "SELECT contract_num,rent_end_date,date(sysdate()) from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' and rent_end_date>DATE_ADD(date(SYSDATE()),INTERVAL 1 MONTH)order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做退租终止' % (fileName, contractNum)) with Base() as base: breach_money = '888.88' # 应收违约金 zhuanzu_money = '999.99' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text( apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编 base.click(apartmentContractEndPage. addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage. addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage. addContractEndMould['tr_contract']) # 右击第一条数据 base.click( apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc'] ) # 立即终止 base.input_text( apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'退租') # 终止原因 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.type_date(apartmentContractEndPage.typeMould['end_date'], info[2]) # 终止日期:当天 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 退租 base.input_text( apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_select( apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage. addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick( apartmentContractEndPage.addContractEndMould['project_type_loc'], index=1) # 租金 base.input_text(apartmentContractEndPage. addContractEndMould['payable_deposit_loc'], '2000.00') # 应退押金 终止收支类型为收入才能删除 base.dblclick( apartmentContractEndPage.addContractEndMould['project_type_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage. addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick( apartmentContractEndPage.addContractEndMould['project_type_loc'], index=21) # 转租费 base.input_text( apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.upload_file( apartmentContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( apartmentContractEndPage.addContractEndMould['end_image_loc']) base.input_text( apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage. addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 # 违约业绩检查 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='OWNER_DEFAULT_BREACH'" % contractNum if sqlbase.waitData(breachAchievementSql, 1): breachAchievementInfo = sqlbase.serach(breachAchievementSql) else: consoleLog(u'%s:出租合同 %s 退租终止生成违约业绩异常,执行SQL:%s' % (fileName, contractNum, breachAchievementSql)) # 删除终止结算 base.open(page.contractEndPage, apartmentContractEndPage.searchMould['tr_contract_end']) base.input_text( apartmentContractEndPage.searchMould['contract_num_loc'], contractNum) base.click(apartmentContractEndPage.searchMould['search_button_loc']) base.staleness_of( apartmentContractEndPage.searchMould['tr_contract_end']) base.click( apartmentContractEndPage.addContractEndMould['delete_button']) base.click(apartmentContractEndPage. addContractEndMould['delete_button_confirm']) base.check_submit() # 检查业绩删除 breachAchievementDelSql = "select is_active,accounting_money,achieve_id from breach_achievement where achieve_id='%s' and deleted=0 and breach_type='OWNER_DEFAULT_BREACH'" % breachAchievementInfo[ 2] achievementDelConunt = sqlbase.get_count(breachAchievementDelSql) base.diffAssert( lambda test: asserts(achievementDelConunt).is_equal_to(0), 1089, u'%s:出租合同 %s 违约业绩删除异常,执行SQL:%s' % (fileName, contractNum, breachAchievementDelSql)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩同步更新到预估业绩排行榜) breahAchievementDetailSql = "select * from contract_achievement_detail where achieve_id='%s' and deleted=0" % breachAchievementInfo[ 2] achievementDetialDelConunt = sqlbase.get_count( breahAchievementDetailSql) base.diffAssert( lambda test: asserts(achievementDetialDelConunt).is_equal_to(0), 1089, u'%s:出租合同 %s 违约业绩分成明细删除异常' % (fileName, contractNum))
def test_1050(): """修改出租合同承租到期日-2""" # describe:在出租合同详情中,修改出租合同承租到期日减1天;业绩发生变化 # data:1、业绩审核状态为待审核;2、合同生成多条业绩;3、记录原业绩中出租和委托核算周期及差价业绩; # result:1、最后一条业绩中出租和委托核算周期都减1天;2、最后一条业绩中差价业绩变化;3、其他业绩记录中数据不变; fileName = 'apartmentAchievement_1050' with Base() as base: # 创建委托合同和出租合同 houseSql = sqlbase.serach( "select house_id,residential_id,building_id,house_code from house where deleted=0 and city_code=330100 order by rand() limit 1" ) # 获取随机开发房源 houseInfo = { 'houseID': houseSql[0], 'residentialID': houseSql[1], 'buildingID': houseSql[2], 'houseCode': houseSql[3] } dateInfo = sqlbase.serach( "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 2 year),date_add(date(sysdate()),interval 27 month)," "date_add(date(sysdate()),INTERVAL 1 month),date_add(date(sysdate()),INTERVAL 14 month),date_add(date(sysdate()),INTERVAL 3 month)," "DATE_SUB(date_add(date(sysdate()),INTERVAL 14 month),INTERVAL 1 DAY) from dual" ) # 日期元素 apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[2], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=3000, parking=100, year_service_fee=500, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888, houseInfo=houseInfo) rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[5], # 承租14个月 deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] achievementSql = "select substring_index(house_code,'-',1) from apartment_contract_achievement where contract_num='%s' and deleted=0" % apartmentContractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementSql, 2)).is_true( ), 1050, u'%s:业绩生成异常' % fileName) # 获取第一条业绩信息 achievement1Sql = "select start_time,end_time,profits_fee from apartment_contract_achievement where contract_num='%s' and deleted=0 and accounting_num=1" % apartmentContractNum achievement1Info = sqlbase.serach(achievement1Sql) accountingEndTime1_old = achievement1Info[1] profits_fee1_old = achievement1Info[2] # 获取第二条业绩信息 achievement2Sql = "select start_time,end_time,profits_fee from apartment_contract_achievement where contract_num='%s' and deleted=0 and accounting_num=2" % apartmentContractNum achievement2Info = sqlbase.serach(achievement2Sql) accountingEndTime2_old = achievement2Info[1] profits_fee2_old = achievement2Info[2] base.open(page.apartmentContractPage, apartmentContractPage.searchContractMould['tr_contract']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同编号 base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.dblclick(apartmentContractPage.searchContractMould['tr_contract'], checkLoc=apartmentContractPage. addApartmentContractMould['contract_num_loc']) # 双击第一条数据 base.type_date(apartmentContractPage.typeMould['rent_end_date2'], dateInfo[7]) # 承租到期日 base.type_select(apartmentContractPage.typeMould['payment_type'], 'NORMAL') # 正常付款 base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'MONTH') # 一次性付款 base.script( "$('#contract_strategy_table > table > tbody > tr > td:nth-child(8) > input').click()" ) base.type_date( apartmentContractPage. addApartmentContractMould['rent_strategy1_end_loc'], dateInfo[7]) base.click( apartmentContractPage.addApartmentContractMould['save_button']) base.check_submit() #获取最新的核算收进价和差价业绩 time.sleep(10) # 获取第一条业绩信息 achievement1InfoNew = sqlbase.serach(achievement1Sql) accountingEndTime1_new = achievement1InfoNew[1] profits_fee1_new = achievement1InfoNew[2] # 获取第二条业绩信息 achievement2InfoNew = sqlbase.serach(achievement2Sql) accountingEndTime2_new = achievement2InfoNew[1] profits_fee2_new = achievement2InfoNew[2] base.diffAssert( lambda test: asserts(accountingEndTime1_new).is_equal_to( accountingEndTime1_old), 1050, u'%s:出租合同 %s 对应承租期修改后首条业绩中核算周期异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, accountingEndTime1_old, accountingEndTime1_new)) base.diffAssert( lambda test: asserts(profits_fee1_new).is_equal_to(profits_fee1_old ), 1050, u'%s:出租合同 %s 对应委托成本修改后首条业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_fee1_old, profits_fee1_new)) # 第二条业绩前后对比 base.diffAssert( lambda test: asserts(accountingEndTime2_new).is_not_equal_to( accountingEndTime2_old), 1050, u'%s:出租合同 %s 对应承租期修改后末条业绩中核算周期异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, accountingEndTime2_old, accountingEndTime2_new)) base.diffAssert( lambda test: asserts(profits_fee2_new).is_not_equal_to( profits_fee2_old), 1050, u'%s:出租合同 %s 对应委托成本修改后末条业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_fee2_old, profits_fee2_new))
def test_1082(): """违约业绩生效已审核修改终止赔入违约金""" # describe:违约业绩生效已审核修改终止结算赔入违约金金额+100,违约业绩不变 # data:1、委托终止结算未复审;2、委托终止类型为业主违约;3、业绩状态未审核;4、业绩已生效 # result:1、违约业绩不变 fileName = 'apartmentAchievement_1082' contractSql = "select contract_num,entrust_end_date,date(sysdate()) from house_contract where contract_id not in (select house_contract.contract_id from apartment ,apartment_contract ,house_contract " \ "where house_contract.contract_id=apartment.house_contract_id and apartment.house_id=apartment_contract.house_id and apartment_contract.real_due_date>NOW()) " \ "and city_code = 330100 and audit_status = 'APPROVED'and contract_status = 'EFFECTIVE' and deleted = 0 and entrust_end_date>NOW() order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机委托合同 %s 做业主违约终止' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage. searchMould['contract_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click( houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.wait_element( houseContractEndPage.addContractEndMould['penalty_loc']) # 等待页面出现 base.type_select(houseContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 结算类型-业主违约 endNum = 'AutoHCE' + '-' + time.strftime('%m%d%H%M') base.input_text( houseContractEndPage.addContractEndMould['end_num_loc'], endNum) base.type_date(houseContractEndPage.typeMould['end_date'], contractSql[2]) # 终止日期:当天 # 结算扣款 base.input_text( houseContractEndPage.addContractEndMould['penalty_loc'], 2000) # 违约金陪入 base.input_text( houseContractEndPage.addContractEndMould['penalty_remark_loc'], u'违约金陪入') # 备注 base.input_text( houseContractEndPage.addContractEndMould['return_rent_loc'], 5000) # 返还房租 base.input_text( houseContractEndPage.addContractEndMould['return_rent_remark_loc'], u'返还房租') # 备注 base.type_date(houseContractEndPage.typeMould['receivable_date'], contractSql[2]) # 应收日期 # 打款信息 base.type_select(houseContractEndPage.typeMould['pay_type'], 'OWNER') # 打款类别-业主收款 base.input_text( houseContractEndPage.addContractEndMould['pay_name_loc'], 'AutoTest') # 姓名 base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.upload_file( houseContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( houseContractEndPage.addContractEndMould['end_image_loc']) base.click( houseContractEndPage.addContractEndMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 # 终止结算复审 contractEndAdd = "select hce.end_id from house_contract hc,house_contract_end hce where hc.contract_id=hce.contract_id and hc.contract_num='%s' and hce.deleted=0 " \ "and hce.audit_status='NO_AUDIT' and hce.end_type='OWNER_DEFAULT'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1082, u'%s:委托合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) houseContractEndId = sqlbase.serach(contractEndAdd)[0] audit(houseContractEndId, auditType.houseContractEnd, auditStatus.chuShen, auditStatus.fuShen) # 违约业绩生效 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH' " \ "and is_active='Y'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(breachAchievementSql, 1)). is_true(), 1082, u'%s:委托合同 %s 业主违约生效异常,执行SQL:%s' % (fileName, contractNum, breachAchievementSql)) breachAchievementInfo = sqlbase.serach(breachAchievementSql) # 业绩审核 base.open(page.defaultAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 time.sleep(10) base.input_text( apartmentAchievementPage.searchContractMould['breach_num_loc'], contractNum) # 输入合同号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['breach_num_loc']) # 点击第一条数据等待详情页面完全显示 time.sleep(1) base.click(apartmentAchievementPage. detailAchievementMoudle['audit_button_loc']) base.input_text( apartmentAchievementPage. detailAchievementMoudle['contract_audit_content'], 'ok') base.click(apartmentAchievementPage. detailAchievementMoudle['contract_audit_confirm']) base.check_submit() # 终止结算初审后修改违约核算金额 audit( houseContractEndId, auditType.houseContractEnd, auditStatus.fanShen, auditStatus.chuShen, ) base.open( page.contractEndPage, houseContractEndPage.searchMould['contract_search_button_loc']) base.click(houseContractEndPage.addContractEndMould['tab_info'], index=1) base.input_text( houseContractEndPage.searchMould['end_contract_num_loc'], contractNum) base.click( houseContractEndPage.searchMould['end_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.searchMould['tr_contract_end']) # 等待数据刷新 base.dblclick( houseContractEndPage.searchMould['tr_contract_end'], checkLoc=houseContractEndPage.addContractEndMould['check_loc']) time.sleep(2) financial_money_new = float(breachAchievementInfo[1]) + 100 base.script("$('#financial_provide_money+span>input').val('%s')" % financial_money_new) # base.input_text(houseContractEndPage.addContractEndMould['financial_money_loc'], financial_money_new) base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.click(houseContractEndPage.addContractEndMould['save_loc']) # 保存 base.check_submit() # 获取修改后业绩数据 time.sleep(10) breachAchievementNewSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH'" % contractNum breachAchievementNewInfo = sqlbase.serach(breachAchievementNewSql) base.diffAssert( lambda test: asserts(breachAchievementNewInfo[1]).is_equal_to( breachAchievementInfo[1]), 1082, u'%s:委托合同 %s 业主违约业绩审核后修改终止合同核算业绩金额后,业绩金额错误,期望值 %s 与之前相同,实际值 %s' % (fileName, contractNum, breachAchievementInfo[1], breachAchievementNewInfo[1]))
def test_1053(): """生效业绩变为已失效""" # describe: 删除业绩对应的出租合同,业绩状态变为已失效; # data:1、业绩审核状态为已审核;2、业绩状态为生效;3、出租合同未终止结算且未续签 # result:1、业绩状态变为已失效;2、业绩已失效状态同步到预估业绩排行榜和核发业绩排行榜; fileName = 'apartmentAchievement_1053' with Base() as base: #创建房源,委托合同 dateSql = "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 1 year),date_add(date(sysdate()),interval 3 year),date_add(date(sysdate()),INTERVAL 1 month) from dual" dateInfo = sqlbase.serach(dateSql) apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[3], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=1234, parking=123, year_service_fee=321, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888) houseContractInfo = sqlbase.serach( "select hc.contract_num,hc.contract_id from house_contract hc inner join apartment a on a.house_id = hc.house_id and a.apartment_id='%s' where hc.audit_status='AUDIT' " % apartmentId) houseContractNum = houseContractInfo[0] houseContractId = houseContractInfo[1] #创建租客,出租合同 customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=5500, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[2], deposit=2000, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] apartmentContractId = apartmentContractInfo['contractID'] #业绩检查 achievementsqla = "select aca.is_active,aca.audit_status,aca.accounting_time from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % (apartmentId,apartmentContractNum) if sqlbase.waitData(achievementsqla, 1): achievementinfo = sqlbase.serach(achievementsqla) base.diffAssert( lambda test: asserts(achievementinfo[0]).is_equal_to('N'), 1053, u'%s:合同 %s 对应业绩生效状态异常,期望值 N 实际值 %s' % (fileName, apartmentContractNum, achievementinfo[0])) base.diffAssert( lambda test: asserts(achievementinfo[1]).is_equal_to('AUDIT'), 1053, u'%s:合同 %s 对应业绩审核状态异常, 期望值 AUDIT 实际值 %s' % (fileName, apartmentContractNum, achievementinfo[1])) else: consoleLog(u'%s:合同 %s 对应业绩生成异常' % (fileName, apartmentContractNum), 'e') consoleLog(u'执行SQL:%s' % achievementsqla) #委托合同审核 audit(houseContractId, auditType.houseContract, auditStatus.chuShen, auditStatus.fuShen) #出租合同审核 audit(apartmentContractId, auditType.apartmentContract, auditStatus.chuShen, auditStatus.fuShen) # 业绩检查 achievementsqlb = "select aca.is_active,aca.audit_status,aca.contract_audit_status from apartment_contract_achievement aca inner join apartment a " \ "on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0 and aca.is_active='Y'" % (apartmentId, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsqlb, 1)).is_true( ), 1053, u'%s:合同 %s 对应业绩生效异常' % (fileName, apartmentContractNum)) #业绩审核 base.open(page.apartmentAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.input_text( apartmentAchievementPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同号 base.type_select( apartmentAchievementPage.searchContractMould['contract_type_loc'], 'NEWSIGN') # 承租类型 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 base.click(apartmentAchievementPage. detailAchievementMoudle['audit_button_loc']) base.input_text( apartmentAchievementPage. detailAchievementMoudle['contract_audit_content'], 'ok') base.click(apartmentAchievementPage. detailAchievementMoudle['contract_audit_confirm']) base.check_submit() achievementStatus = "select * from apartment_contract_achievement where is_active='Y' and audit_status='APPROVED' AND deleted=0 and accounting_num=1 " \ "and city_code=330100 and contract_num='%s'" % apartmentContractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementStatus, 1) ).is_true(), 1053, u'%s:合同 %s 对应业绩审核异常' % (fileName, apartmentContractNum)) # 出租合同反审后删除 audit(apartmentContractId, auditType.apartmentContract, auditStatus.fanShen) base.open(page.apartmentContractPage, apartmentContractPage.searchContractMould['tr_contract']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同编号 base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.context_click( apartmentContractPage.searchContractMould['tr_contract']) base.click(apartmentContractPage.searchContractMould['delete_loc']) base.click(apartmentContractPage. addApartmentContractMould['delete_button_confirm']) base.check_submit() # 预估业绩排行榜 time.sleep(10) chievementDetailSql = "select ca.receivable,ca.is_active from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id " \ "inner join apartment_contract_achievement aca on aca.achievement_id=ca.achieve_id and aca.deleted=0 and aca.contract_num='%s' where ca.contract_type='NORMAL' " \ "and ca.deleted=0" % apartmentContractNum breachAchievementStatus = sqlbase.serach(chievementDetailSql)[1] base.diffAssert( lambda test: asserts(breachAchievementStatus).is_equal_to('INVALID' ), 1053, u'%s:出租合同 %s 业绩分成明细业绩状态异常,期望值 INVALID 实际值 %s' % (fileName, apartmentContractNum, breachAchievementStatus))
def test_1065(): """委托正退终止不生成违约业绩""" # describe:委托合同终止结算,结算类型为正退,不生成违约业绩 # data:1、委托合同已复审;2、合同状态为有效;3、委托合同下无有效的出租合同; # result:1、合同状态变为正退;2、不生成违约业绩; fileName = 'apartmentAchievement_1065' contractSql = "select contract_num,entrust_end_date,date(sysdate()) from house_contract where contract_id not in (select house_contract.contract_id from apartment ,apartment_contract ,house_contract " \ "where house_contract.contract_id=apartment.house_contract_id and apartment.house_id=apartment_contract.house_id and apartment_contract.real_due_date>NOW()) " \ "and city_code = 330100 and audit_status = 'APPROVED'and contract_status = 'EFFECTIVE' and deleted = 0 and entrust_end_date>NOW() order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机委托合同 %s 做正退终止' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage. searchMould['contract_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click( houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.wait_element( houseContractEndPage.addContractEndMould['penalty_loc']) # 等待页面出现 base.type_select(houseContractEndPage.typeMould['end_type'], 'RETREATING') # 结算类型-正退 base.type_date(houseContractEndPage.typeMould['end_date'], contractSql[2]) # 终止日期:当天 # 结算扣款 base.input_text( houseContractEndPage.addContractEndMould['penalty_loc'], 2000) # 违约金陪入 base.input_text( houseContractEndPage.addContractEndMould['penalty_remark_loc'], u'违约金陪入') # 备注 base.input_text( houseContractEndPage.addContractEndMould['return_rent_loc'], 5000) # 返还房租 base.input_text( houseContractEndPage.addContractEndMould['return_rent_remark_loc'], u'返还房租') # 备注 # 代垫费用 base.click(houseContractEndPage.addContractEndMould['tool_bar'], index=0) # 新增代垫 base.type_select(houseContractEndPage.typeMould['return_type_loc'], 'LIQUIDATED') # 退款项目:违约金赔出 base.input_text( houseContractEndPage.addContractEndMould['return_money_loc'], 666) # 退款金额 base.type_select(houseContractEndPage.typeMould['bear_type_loc'], 'COMPANY') # 承担方-公司 base.type_select(houseContractEndPage.typeMould['bear_name'], 'ISZTECH') # 承担方姓名 base.type_date(houseContractEndPage.typeMould['money_start_date'], contractSql[2]) # 费用开始时间 base.type_date(houseContractEndPage.typeMould['money_end_date'], contractSql[2]) # 费用结束时间 base.type_select(houseContractEndPage.typeMould['explain'], 'VACANCY') # 情况说明-空置期 # base.type_select(houseContractEndPage.typeMould['dispute'], 'N') # 是否纠纷 base.type_date(houseContractEndPage.typeMould['receivable_date'], contractSql[2]) # 应收日期 # 打款信息 base.type_select(houseContractEndPage.typeMould['pay_type'], 'OWNER') # 打款类别-业主收款 base.input_text( houseContractEndPage.addContractEndMould['pay_name_loc'], 'AutoTest') # 姓名 base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.click( houseContractEndPage.addContractEndMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 # 终止结算新增检查 contractEndAdd = "select * from house_contract hc,house_contract_end hce where hc.contract_id=hce.contract_id and hc.contract_num='%s' and hce.deleted=0 " \ "and hce.audit_status='NO_AUDIT' and hce.end_type='RETREATING'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1065, u'%s:委托合同 %s 正退终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 合同状态检查 contractStatus = sqlbase.serach( "select contract_status from house_contract where deleted = 0 and contract_num='%s' " % contractNum)[0] base.diffAssert( lambda test: asserts(contractStatus).is_equal_to('RETREATING'), 1065, u'%s:委托合同 %s 正退终止结算后状态异常,期望值 RETREATING 实际值 %s' % (fileName, contractNum, contractStatus)) # 违约业绩检查 time.sleep(10) # 业绩生成有时间延迟,这里等待10秒 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 " % contractNum base.diffAssert( lambda test: asserts(sqlbase.get_count(breachAchievementSql) ).is_equal_to(0), 1065, u'%s:委托合同 %s 正退终止有违约业绩生成,业务异常' % (fileName, contractNum))
def test_1070(): """检测出租合同正常续签""" with Base() as base: apartment = interface.addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='ENTIRE', sign_date=today(), owner_sign_date=today(), entrust_start_date=today(), entrust_end_date=addMonths(24), delay_date=addMonths(27), free_start_date=today(), free_end_date=addMonths(1), first_pay_date=today(), second_pay_date=addMonths(1), rent=2800, parking=120, year_service_fee=180, payment_cycle='MONTH') customer = interface.createCustomer() contractInfo = interface.createApartmentContract( apartement_id=apartment, customerInfo=customer, rent_price=5500, sign_date=today(), rent_start_date=today(), rent_end_date=addMonths(12), deposit=2500, payment_cycle='MONTH') base.open( page.apartmentContractPage, apartmentContractPage.searchContractMould['contract_num_loc']) base.click( apartmentContractPage.searchContractMould['entire_tab_button']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], contractInfo['contractNum'], index=1) base.click(apartmentContractPage. searchContractMould['entire_search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['entire_tr_contract']) interface.receipt('apartmentContract', contractInfo['contractID']) base.click(apartmentContractPage.searchContractMould['resign_loc'], index=1) base.click( apartmentContractPage.addApartmentContractMould['deposit_manage'], index=0) contractNum = contractInfo['contractNum'] + 'xu' base.input_text( apartmentContractPage. addApartmentContractMould['contract_num_loc'], contractNum) base.type_date(apartmentContractPage.typeMould['sign_date'], today()) base.type_date(apartmentContractPage.typeMould['rent_end_date2'], addDays(-1, addMonths(24))) base.input_text( apartmentContractPage.addApartmentContractMould['deposit_loc'], 2000) base.type_select(apartmentContractPage.typeMould['payment_type'], 'NORMAL') base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'TOW_MONTH') base.script( "$('#contract_strategy_table > table > tbody > tr > td:nth-child(8) > input').click()" ) base.type_date( apartmentContractPage. addApartmentContractMould['rent_strategy1_end_loc'], addDays(-1, addMonths(24))) base.click( apartmentContractPage.addApartmentContractMould['next_loc_1']) base.click( apartmentContractPage.addApartmentContractMould['next_loc_2']) base.click( apartmentContractPage.addApartmentContractMould['submit_loc']) base.check_submit() consoleLog(u'已成功续签承租合同 %s' % contractNum) time.sleep(10) achievementCount = sqlbase.get_count( "SELECT * from apartment_contract_achievement where contract_id = " "(SELECT contract_id from apartment_contract where contract_num = '%s' and deleted = 0)" % contractNum) receiptsCount = sqlbase.get_count( "SELECT * from apartment_contract_receipts where contract_id = " "(SELECT contract_id from apartment_contract where contract_num = '%s' and deleted = 0)" % contractNum) base.diffAssert(lambda t: asserts(achievementCount).is_not_zero(), 1070, u'续签后,没有生成出单业绩') base.diffAssert(lambda t: asserts(receiptsCount).is_not_zero(), 1070, u'续签后,原合同押金没有转入新合同中')
def test_1021(): """出租合同转租终止""" # describe:检测预约终止结算功能 # data:1.合同已复审2.合同不是已续3.终止类型为转租 # result:终止结算提交成功 fileName = 'apartmentContract_1021' contractSql = "SELECT contract_num,rent_end_date from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做转租终止' % (fileName, contractNum)) with Base() as base: base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text( apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编号 today = datetime.date.today() base.click(apartmentContractEndPage. addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage. addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage. addContractEndMould['tr_contract']) # 右击第一条数据 base.click( apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc'] ) # 立即终止 base.input_text( apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'退租') # 终止原因 base.type_date(apartmentContractEndPage.typeMould['end_date'], today) # 终止日期:当天 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.type_select(apartmentContractEndPage.typeMould['end_type'], 'CORPORATE_DEFAULT') # 转租 base.input_text( apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_select( apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage. addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage. addContractEndMould['receivable_money_loc'], '888.88') # 应收违约金 base.input_text( apartmentContractEndPage.addContractEndMould['payable_money_loc'], '666.66') # 应退违约金 base.upload_file( apartmentContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( apartmentContractEndPage.addContractEndMould['end_image_loc']) base.input_text( apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.script('$("#form_submit_btn").click()') # 提交 base.check_submit() # 等待提交完成 contractEndAdd="SELECT * FROM apartment_contract ac,apartment_contract_end ace WHERE ac.contract_id = ace.contract_id and ace.audit_status='NO_AUDIT' " \ "AND ace.end_type='CORPORATE_DEFAULT'and ace.deleted=0 and ace.end_contract_num='%s'" % endNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1021, u'%s:出租合同 %s 预约终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd))
def test_1062(): """正退不生成违约业绩""" # describe:出租合同正退终止结算生成违约业绩,记录同步到预估业绩排行榜 # data:1、出租合同状态为有效;2、出租合同审核状态为已复审;3、应收违约金大于0;4、应收转租费大于0 # result:1、合同状态变为正退;2、不生成违约业绩; fileName = 'apartmentAchievement_1062' contractSql = "SELECT contract_num,rent_end_date,date(sysdate()) from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' and rent_end_date>DATE_ADD(date(SYSDATE()),INTERVAL 1 MONTH)order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做正退终止' % (fileName, contractNum)) with Base() as base: breach_money = '888.88' # 应收违约金 zhuanzu_money = '666.66' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text( apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编 base.click(apartmentContractEndPage. addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage. addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage. addContractEndMould['tr_contract']) # 右击第一条数据 base.click( apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc'] ) # 立即终止 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.input_text( apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_date(apartmentContractEndPage.typeMould['end_date'], info[1]) # 终止日期:承租到期日 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'RETREATING') # 正退 base.input_text( apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'承租周期已完') # 终止原因 base.type_select( apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage. addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage. addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text( apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.input_text( apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage. addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 contractEndAdd = "SELECT ace.end_contract_num FROM apartment_contract ac,apartment_contract_end ace WHERE ac.contract_id = ace.contract_id " \ "and ace.audit_status='NO_AUDIT' AND ace.end_type='RETREATING'and ace.deleted=0 and ac.contract_num='%s'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1062, u'%s:出租合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 合同状态检查 contractStatus = sqlbase.serach( "select contract_status from apartment_contract where deleted = 0 and contract_num='%s' " % contractNum)[0] base.diffAssert( lambda test: asserts(contractStatus).is_equal_to('RETREATING'), 1062, u'%s:出租合同 %s 终止结算后状态异常异常,期望值 RETREATING 实际值 %s' % (fileName, contractNum, contractStatus)) # 违约业绩检查 time.sleep(10) # 业绩生成有时间延迟,这里等待10秒 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 " % contractNum base.diffAssert( lambda test: asserts(sqlbase.get_count(breachAchievementSql) ).is_equal_to(0), 1062, u'%s:出租合同 %s 正退终止有违约业绩生成,业务异常' % (fileName, contractNum))
def test_1052(): """业绩反审""" # describe:业绩反核后重新核算功能可用 # data:1、出单业绩状态为生效;2、出单业绩审核状态为已审核 # result:1、业绩审核状态变为已审核;2、预估业绩排行榜中对应审核状态同步变为待审核;;3、重新核算功能可用; fileName = 'apartmentAchievement_1052' achievementSql = "select contract_num,house_code from apartment_contract_achievement where is_active='Y' and audit_status='APPROVED' AND deleted=0 and city_code=330100 " \ "and contract_type='RENEWSIGN' AND exists (select * from contract_achievement_detail cad,contract_achievement ca where ca.achieve_id=achievement_id " \ "and ca.achieve_id=cad.achieve_id and cad.deleted=0 and ca.deleted=0) order by rand() limit 1" if sqlbase.get_count(achievementSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % achievementSql) return info = sqlbase.serach(achievementSql) apartmentContractNum = info[0] consoleLog(u'%s:使用出租合同 %s 出单业绩做反审' % (fileName, apartmentContractNum)) with Base() as base: base.open(page.apartmentAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.input_text( apartmentAchievementPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同号 base.input_text( apartmentAchievementPage.searchContractMould['search_address_loc'], info[1]) # 房源编号 base.type_select( apartmentAchievementPage.searchContractMould['contract_type_loc'], 'RENEWSIGN') # 承租类型 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 base.click(apartmentAchievementPage. detailAchievementMoudle['fanshen_button_loc']) base.input_text( apartmentAchievementPage. detailAchievementMoudle['contract_audit_content'], 'ok') base.click(apartmentAchievementPage. detailAchievementMoudle['contract_audit_confirm']) base.check_submit() achievementStatus = "select * from apartment_contract_achievement where is_active='Y' and audit_status='AUDIT' AND deleted=0 and city_code=330100 " \ "and contract_num='%s'" % apartmentContractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementStatus, 1) ).is_true(), 1052, u'%s:出租合同 %s 业绩审核异常' % (fileName, apartmentContractNum)) base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 base.click( apartmentAchievementPage.detailAchievementMoudle['resave_loc']) # 预发业绩排行榜 base.open(page.achievementListPrePage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], apartmentContractNum) # 输入合同号 base.input_text( apartmentAchievementPage.searchContractMould['search_address_loc'], info[1]) # 输入房源 base.type_select( apartmentAchievementPage.searchContractMould['contract_type_loc'], 'NORMAL') # 承租类型 base.type_select( apartmentAchievementPage.searchContractMould['rent_type_loc'], 'RENEWSIGN') base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 achievementDetailCount = sqlbase.get_count( "select * from contract_achievement_detail acd inner join apartment_contract_achievement aca " "on aca.achievement_id=acd.achieve_id and aca.contract_num='%s' where acd.deleted=0" % apartmentContractNum) for i in range(achievementDetailCount): achievement_audit_status = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"audit_status\"] > div').text();return a" % i, True) audit_status = u'待审核' base.diffAssert( lambda test: asserts(achievement_audit_status).is_equal_to( audit_status), 1052, u'%s:出租合同 %s 对应预估业绩排行榜页面第 %s 条状态异常,期望值 %s 实际值 %s' % (fileName, apartmentContractNum, i + 1, audit_status, achievement_audit_status))
def test_1024(): """特殊免租期委托合同创建""" # describe:开发自营房源列表中签约委托合同 # data:1、委托周期三年,三年的租金要递增;2、免租类别选首月,免租开始日和免租到期日选择为2个月;3、委托类型服务整租;4、车位费和服务费不为0; # result:1、委托合同创建成功;2、委托合同应付中生成财务记录;3、房源状态变为自营待租; fileName = 'houseContract_1024' hosueSql = "select h.house_code,h.build_area,sysdate(),date_ADD(date(sysdate()), interval 1 DAY),date_ADD(date(sysdate()), interval 3 YEAR),date_ADD(date(sysdate()), interval 1 MONTH),date_ADD(date(sysdate()), interval 2 MONTH) " \ "from house_rent hr INNER JOIN house h on h.house_id=hr.house_id and h.city_code=330100 and h.deleted=0 where hr.house_status='WAITING_RENT' order by rand() limit 1" if sqlbase.get_count(hosueSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % hosueSql) return contractInfo = sqlbase.serach(hosueSql) with Base() as base: base.open(page.devHousePage, houseContractPage.addHouseContractMould['edit_loc']) base.input_text( houseContractPage.houseSearchMould['residential_name_loc'], contractInfo[0]) # 输入房源编号 base.click( houseContractPage.houseSearchMould['search_button_loc']) # 搜索 base.staleness_of( houseContractPage.houseSearchMould['tr_house']) # 等待列表刷新 base.click(houseContractPage. houseSearchMould['add_house_contract_button']) # 新增委托 try: base.input_text( houseContractPage.addHouseContractMould['inside_space_loc'], contractInfo[1]) # 面积 except: base.click( houseContractPage.addHouseContractMould['newsign_button']) #新签 base.input_text( houseContractPage.addHouseContractMould['inside_space_loc'], contractInfo[1]) # 面积 base.type_select(houseContractPage.typeMould['property_type'], 'HAVECARD') # 有产证商品房 base.click( houseContractPage.addHouseContractMould['pledge_loc']) # 抵押情况 base.type_select(houseContractPage.typeMould['apartment_type'], 'MANAGE') # 服务公寓 base.type_select(houseContractPage.typeMould['reform_way'], 'UNRRESTYLE') # 不改造 base.type_select(houseContractPage.typeMould['entrust_type'], 'ENTIRE') # 整租 contractNum = 'AutoTestH' + '-' + time.strftime('%m%d%H%M') # 定义合同编号 base.input_text( houseContractPage.addHouseContractMould['contract_num_loc'], contractNum) # 输入合同编号 base.type_select(houseContractPage.typeMould['sign_body'], 'ISZTECH') # 杭州爱上租科技有限公司 base.type_date(houseContractPage.typeMould['sign_date'], contractInfo[2]) # 签约日期:当前日期 base.type_date(houseContractPage.typeMould['owner_sign_date'], contractInfo[2]) # 业主交房日期:当前日期 base.type_date(houseContractPage.typeMould['fitment_start_date'], contractInfo[3]) # 装修起算日:当前日期第二天 base.type_date(houseContractPage.typeMould['fitment_end_date'], contractInfo[5]) # 装修截止日:当前日期后一个月 base.type_date(houseContractPage.typeMould['entrust_start_date'], contractInfo[3]) # 委托起算日:当前日期第二天 base.type_date(houseContractPage.typeMould['entrust_end_date'], contractInfo[4]) # 委托到期日:当前日期后三年 base.type_select(houseContractPage.typeMould['freeType'], 'OTHER') # 免租:其他 base.type_select(houseContractPage.typeMould['free_start_date'], contractInfo[3]) #免租开始日期:当前日期第二天 base.type_select(houseContractPage.typeMould['free_end_date'], contractInfo[6]) #免租结束日期:当前日期后二个月 base.type_date(houseContractPage.typeMould['first_pay_date'], contractInfo[3]) # 首次付款日:当前日期第二天 base.type_date(houseContractPage.typeMould['second_pay_date'], contractInfo[5]) # 第二次付款日:当前日期后一个月 base.input_text(houseContractPage.addHouseContractMould['rent_loc'], 2000) # 租金 base.input_text(houseContractPage.addHouseContractMould['parking_loc'], 100) # 停车费 base.input_text( houseContractPage.addHouseContractMould['service_fee_loc'], 100) # 服务费 # base.type_select(base.typeMould['payment_cycle'], '半年付') 因为租金策略的机制是点击付款周期后触发,直接赋值不会触发,所以此select不直接赋值,采用点击方式 base.click(houseContractPage. addHouseContractMould['payment_cycle_loc_1']) # 付款周期 base.click(houseContractPage. addHouseContractMould['payment_cycle_loc_2']) # 月付 base.click(houseContractPage. addHouseContractMould['contract_strategy2.1_loc']) base.input_text( houseContractPage.addHouseContractMould['contract_strategy2_loc'], 2500) # 第二年租金策略 base.click(houseContractPage. addHouseContractMould['contract_strategy3.1_loc']) base.input_text( houseContractPage.addHouseContractMould['contract_strategy3_loc'], 3000) # 第三年租金策略 base.click( houseContractPage.addHouseContractMould['next_loc_1']) # 下一页 base.click( houseContractPage.addHouseContractMould['next_loc_2']) # 下一页 # 业主信息 landlordName = 'AutoTest' base.input_text( houseContractPage.addHouseContractMould['landlord_name_loc'], landlordName) base.type_select(houseContractPage.typeMould['ownerCardType'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['landlord_card_loc'], '42062119910828541X') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage.addHouseContractMould['landlord_phone_loc'], '13666666666') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage.addHouseContractMould['landlord_address_loc'], u'浙江省杭州市滨江区海创基地南楼三层') base.click(houseContractPage.addHouseContractMould['signFlag_loc']) time.sleep(0.5) # 签约人信息 base.input_text(houseContractPage.addHouseContractMould['email_loc'], '*****@*****.**') # 紧急联系人 base.input_text( houseContractPage.addHouseContractMould['emergency_name_loc'], u'紧急联系人') base.input_text( houseContractPage.addHouseContractMould['emergency_phone_loc'], '13777777777') base.type_select(houseContractPage.typeMould['emergency_card_type'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['emergency_id_card_loc'], '411722197508214014') base.input_text( houseContractPage.addHouseContractMould['emergency_address_loc'], u'浙江省杭州市滨江区海创基地北楼四层') # 收款人信息 base.type_select(houseContractPage.typeMould['account_name'], landlordName) # 收款人 # base.input_text(houseContractPage.addHouseContractMould['account_bank_loc'], u'农业银行') # base.input_text(houseContractPage.addHouseContractMould['account_num_loc'], '1234567890') #测试环境 base.type_select(houseContractPage.typeMould['pay_object'], 'PERSONAL') # 个人 base.input_text( houseContractPage.addHouseContractMould['account_num_loc'], '123456789') base.send_keys( houseContractPage.addHouseContractMould['account_num_loc'], Keys.ENTER) # base.input_text(houseContractPage.addHouseContractMould['account_num_loc'], '1234567890') # base.send_keys(houseContractPage.addHouseContractMould['account_num_loc'], Keys.ENTER) #base.click(houseContractPage.addHouseContractMould['bank_loc']) # 收款银行 base.click( houseContractPage.addHouseContractMould['close_loc']) # 确认无误 base.input_text( houseContractPage.addHouseContractMould['account_bank_loc'], u'农业银行') #收款支行 base.click(houseContractPage.addHouseContractMould['next_loc_3']) base.click(houseContractPage.addHouseContractMould['submit_loc']) base.check_submit() #合同生成检查 contractSql = "select * from house_contract where is_active='Y' and apartment_type='MANAGE' and entrust_type='ENTIRE' and contract_num='%s'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractSql, 1)).is_true(), 1024, u'%s:委托合同 %s 新增失败,执行SQL:%s' % (fileName, contractNum, contractSql)) #房源状态检查 houseStatusSql = "select a.rent_status from apartment a inner join house h on h.house_id = a.house_id and h.house_code = '%s'" % contractInfo[ 0] base.diffAssert( lambda test: asserts(sqlbase.serach(houseStatusSql)[0]). is_equal_to('WAITING_RENT'), 1024, u'%s:委托合同 %s 房源状态异常,执行SQL:%s' % (fileName, contractNum, houseStatusSql)) #委托合同应付检查 payableSql = "select * from house_contract_payable hcp inner join house_contract hc on hc.contract_id=hcp.contract_id and hc.contract_num='%s' " % contractNum base.diffAssert( lambda test: asserts(sqlbase.get_count(payableSql)).is_equal_to( 36), 1024, u'%s:委托合同 %s 对应委托合同应收记录生成异常,期望生成 36 条,实际生成%s条,执行SQL:%s' % (fileName, contractNum, sqlbase.get_count(payableSql), payableSql))
def test_1043(): """手工修改核发月份""" # describe: 手工修改核发月份,对应业绩记录核发月份发生改变 # data:1、业绩审核状态为待审核;2、业绩核发月份字段不为空; # result:1、修改后的核发月份同步到预估业绩排行榜;2、修改后的核发月份同步到核发业绩排行榜;3、出单业绩列表页中显示修改后的核发月份,取分成记录中最早的月份; fileName = 'apartmentAchievement_1043' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' WHERE a.deleted = 0 " \ "AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT'" \ "AND hc.real_due_date>date_add(date(sysdate()), interval 1 YEAR) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] apartmentId = info[1] dateInfo = sqlbase.serach( "select 1,2,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_add(date(sysdate()), interval 6 month),DATE_FORMAT(DATE_ADD(sysdate(),INTERVAL 1 MONTH),'%Y-%m') from dual" ) consoleLog(u'%s:使用房源 %s 签约出租合同' % (fileName, apartmentCode)) with Base() as base: # 创建委托和出租合同 customer = createCustomer() rentPriceInfo = sqlbase.serach( "select rent_price from apartment where apartment_id='%s'" % apartmentId)[0] rentPrice = float(rentPriceInfo) apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[2], rent_start_date=dateInfo[3], rent_end_date=dateInfo[4], deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] apartmentContractId = apartmentContractInfo['contractID'] # 出租合同审核 audit(apartmentContractId, auditType.apartmentContract, auditStatus.chuShen, auditStatus.fuShen) # 出租合同应收 base.open( page.apartmentContractPayPage, apartmentContractReceivablePage.searchMould['tr_receviable_loc']) base.click(apartmentContractReceivablePage.searchMould['reset_button']) base.staleness_of( apartmentContractReceivablePage.searchMould['tr_receviable_loc']) base.input_text( apartmentContractReceivablePage.searchMould['contractNum_loc'], apartmentContractNum) base.click( apartmentContractReceivablePage.searchMould['search_button']) base.staleness_of( apartmentContractReceivablePage.searchMould['tr_receviable_loc']) moneyType = { u'首期管家服务费': int(0.07 * rentPrice), u'中介服务费': 1000, u'首期租金': int(rentPrice), u'押金': int(rentPrice) } for i in range(3): moneyType_row = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"money_type\"] > div').text();return a" % i, True) base.click( apartmentContractReceivablePage.searchMould['receviabl_button'] [i]) base.input_text( apartmentContractReceivablePage. detailMould['receipts_money_loc'], moneyType[moneyType_row]) base.click( apartmentContractReceivablePage.detailMould['receipts_type']) base.type_date( apartmentContractReceivablePage. detailMould['receipts_date_loc'], dateInfo[2]) base.input_text( apartmentContractReceivablePage.detailMould['alipay_card_loc'], '13676595110') base.input_text( apartmentContractReceivablePage. detailMould['operation_total_loc'], moneyType[moneyType_row]) base.click( apartmentContractReceivablePage.detailMould['save_button']) base.check_submit() base.click( apartmentContractReceivablePage.detailMould['print_btn_close']) time.sleep(1) # 业绩检查 achievementSql = "select aca.is_active,aca.audit_status,aca.accounting_time,aca.achievement_id from apartment_contract_achievement aca inner join apartment a on" \ " a.apartment_code=aca.house_code where contract_num='%s' and a.apartment_code='%s'and aca.deleted=0 and aca.accounting_time is not " \ "null" % (apartmentContractNum, apartmentCode) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementSql, 1)).is_true( ), 1043, u'%s:合同 %s 对应业绩核发月份异常' % (fileName, apartmentContractNum)) achievementInfo = sqlbase.serach(achievementSql) achievementDetialConunt = sqlbase.get_count( "select * from apartment_contract_achievement_detail where achievement_id='%s'" % achievementInfo[3]) # 业绩分成条数 # 修改核发月份 base.open(page.apartmentAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.input_text( apartmentAchievementPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 for i in range(achievementDetialConunt): base.type_date(apartmentAchievementPage. detailAchievementMoudle['accounting_time_loc'][i], dateInfo[5]) # 修改核发月份到下个月 base.click(apartmentAchievementPage. detailAchievementMoudle['save_button_loc']) base.check_submit() # 出租合同业绩分成明细表(检查出单业绩对应核发月份是否修改) time.sleep(5) apartmentContractAchievementSql = "select accounting_time from apartment_contract_achievement_detail where deleted=0 and achievement_id='%s'" % achievementInfo[ 3] accountingTime = sqlbase.serach(apartmentContractAchievementSql)[0] base.diffAssert( lambda test: asserts(accountingTime).is_equal_to(dateInfo[5]), 1043, u'%s:出租合同 %s 对应出租业绩分成记录核发月份修改异常,修改后期望值 %s 实际值 %s' % (fileName, apartmentContractNum, dateInfo[5], accountingTime)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查核发月份同步更新到预估业绩排行榜) contractAchievementSql = "select achievement_month from contract_achievement_detail where deleted=0 and achieve_id='%s'" % ( achievementInfo[3]) achievementDetial = sqlbase.serach(contractAchievementSql) base.diffAssert( lambda test: asserts(achievementDetial[0]).is_equal_to(dateInfo[ 5]), 1043, u'%s:出租合同 %s 对应业绩分成明细核发月份修改异常,修改后期望值 %s 实际值 %s' % (fileName, apartmentContractNum, dateInfo[5], achievementDetial[0])) # 核发业绩排行榜核发月份检查 base.open(page.achievementListPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], apartmentContractNum) # 输入合同号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 time.sleep(3) for i in range(achievementDetialConunt): achievement_month = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"achievement_month\"] > div').text();return a" % i, True) base.diffAssert( lambda test: asserts(achievement_month).is_equal_to(dateInfo[5] ), 1043, u'%s:出租合同 %s 对应业绩修改核发月份的同步到核发业绩排行榜异常,期望值 %s 实际值 %s' % ( fileName, apartmentContractNum, dateInfo[5], achievement_month, ))
def test_1011(): """出租合同月付不打折,半年付打0.985折,年付打0.97折""" # describe: 合同周期为一年半,选择付款方式年付、半年付、月付,对应有不同的折扣 # data:房源为整租,品牌公寓,合同周期为一年半 # result:1.合同创建成功2.年付时,租金、服务费打0.97折3.半年付时,租金、服务费打0.985折4.月付时,租金、服务费不打折 # 获取随机房源 fileName = 'apartmentContract_1011' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id,a.rent_price FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' WHERE a.deleted = 0 " \ "AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'ENTIRE' AND a.rent_status='WAITING_RENT' AND hc.apartment_type='BRAND' " \ "AND hc.real_due_date>date_add(date(sysdate()), interval 18 month) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] rent_price = info[4] with Base() as base: base.open(page.customerListPage, apartmentContractPage.customerSignMould['tr_customer']) try: base.find_element(By.ID,'search_btn').click() base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) #搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a')) # 可能会有分配租客的弹窗出现,此为关闭 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True) # 获取第一条数据编号 base.input_text(apartmentContractPage.customerSignMould['search_customer_name_loc'], customerCode) base.click(apartmentContractPage.customerSignMould['search_button_loc']) base.staleness_of(apartmentContractPage.customerSignMould['tr_customer']) base.script("$('button#edit_btn')[2].click()") # 点击列表页第一行的签约 consoleLog(u'%s:使用房源 %s 签约出租合同' % (fileName, apartmentCode)) base.input_text(apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click(apartmentContractPage.customerSignMould['house_search_btn']) # 搜索 base.staleness_of(apartmentContractPage.customerSignMould['entire_apartment_loc']) # 搜索等待列表刷新 try: base.dblclick(apartmentContractPage.customerSignMould['entire_apartment_loc'], checkLoc=apartmentContractPage.addApartmentContractMould['contract_num_loc']) # 对查询结果的第一条房源数据双击发起签约 except: base.click(apartmentContractPage.customerSignMould['newsign_button_loc']) # 新签 contractNum = 'AutoTest' + '-' + time.strftime('%m%d%H%M%S') # 定义合同编号 randomHouseContract = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_add(date(sysdate()), interval 18 month) " "from house_contract where contract_num = '%s'" % info[2]) # 获取房源合同时间元素 base.input_text(apartmentContractPage.addApartmentContractMould['contract_num_loc'], contractNum) # 合同编号 base.type_date(apartmentContractPage.typeMould['sign_date'], randomHouseContract[2]) # 签约日期 base.type_date(apartmentContractPage.typeMould['rent_start_date'], randomHouseContract[3]) # 承租起算日 base.type_date(apartmentContractPage.typeMould['rent_end_date'], randomHouseContract[4]) # 承租到期日 base.input_text(apartmentContractPage.addApartmentContractMould['deposit_loc'], 1234) # 押金 base.type_select(apartmentContractPage.typeMould['payment_type'], 'NORMAL') # 正常付款 base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'MONTH') # 月付 base.click(apartmentContractPage.addApartmentContractMould['rent_strategy_price_loc']) rent_money_month = base.script( "var a = $('#contract_strategy_table tr>td:nth-child(6)>span>input').val();return a", True) # 获取第一条数据编号 base.diffAssert(lambda test: asserts(rent_money_month).is_equal_to(rent_price),1011, u'%s:出租合同租金月付时显示异常,期望值 %s 实际值 %s' % (fileName, rent_price, rent_money_month)) base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'HALF_YEAR') # 半年付 base.click(apartmentContractPage.addApartmentContractMould['rent_strategy_price_loc']) rent_money_halfyear = base.script( "var a = $('#contract_strategy_table tr>td:nth-child(6)>span>input').val();return a", True) # 获取第一条数据编号 base.diffAssert(lambda test: asserts(rent_money_halfyear).is_equal_to(str('%.2f' % (float(rent_price)*0.985))), 1011, u'%s:出租合同租金半年付时显示异常,期望值 %s 实际值 %s' % (fileName, str('%.2f' % (float(rent_price)*0.985)), rent_money_halfyear)) base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'ONE_YEAR') # 一年付 base.click(apartmentContractPage.addApartmentContractMould['rent_strategy_price_loc']) rent_money_year = base.script( "var a = $('#contract_strategy_table tr>td:nth-child(6)>span>input').val();return a", True) # 获取第一条数据编号 base.diffAssert(lambda test: asserts(rent_money_year).is_equal_to(str('%.2f' % (float(rent_price) * 0.97))), 1011, u'%s:出租合同租金年付时显示异常,期望值 %s 实际值 %s' % (fileName, str('%.2f' % (float(rent_price) * 0.97)), rent_money_year))
def test_1090(): """下定违约业绩删除""" # describe:下定违约金记录删除,业绩同步删除 # data:1、业绩状态未审核;2、违约金列表中记录未审核; # result:1、违约业绩删除;2、预估业绩排行榜中业绩删除; fileName = 'apartmentAchievement_1090' apartmentSql = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id,a.rent_price FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' WHERE a.deleted = 0 " \ "AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT' AND hc.apartment_type='BRAND' " \ "AND hc.real_due_date>date_add(date(sysdate()), interval 2 YEAR) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(apartmentSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % apartmentSql) return apartmentinfo = sqlbase.serach(apartmentSql) apartmentCode = apartmentinfo[0] earnestMoney = apartmentinfo[4] if float( apartmentinfo[4]) > 1000.00 else '1000.00' consoleLog(u'%s:取随机转租房源 %s 做下定' % (fileName, apartmentCode)) with Base() as base: # 下定 base.open(page.customerListPage, customerPage.listMould['tr_customer']) try: base.find_element(By.ID, 'search_btn').click() base.staleness_of( customerPage.listMould['tr_customer']) # 搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a' )) # 可能会有分配租客的弹窗出现,此为关闭 base.type_select(customerPage.listMould['customer_status_loc'], 'EFFECTIVE') base.click(customerPage.listMould['search_button']) base.staleness_of(customerPage.listMould['tr_customer']) # 搜索等待列表刷新 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True) # 获取第一条数据编号 # customerName = createCustomer()['customer_name'] base.input_text(customerPage.listMould['customer_name_search'], customerCode) base.click(customerPage.listMould['search_button']) base.staleness_of(customerPage.listMould['tr_customer']) # 搜索等待列表刷新 base.click(customerPage.listMould['book_loc']) # 下定 base.input_text(customerPage.listMould['earnest_money_loc'], earnestMoney) # 定金 base.click(customerPage.listMould['property_address']) # 选择房源 base.click(apartmentContractPage.customerSignMould['share']) # 点合租 base.input_text( apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click( apartmentContractPage.customerSignMould['house_search_btn']) # 搜索 base.staleness_of( apartmentContractPage.customerSignMould['apartment_loc']) base.dblclick( apartmentContractPage.customerSignMould['apartment_loc']) # 选择房源 base.upload_file( apartmentContractPage.customerSignMould['add_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element(apartmentContractPage.customerSignMould['image_loc']) base.click(customerPage.listMould['submit_button']) # 提交 base.check_submit() # 定金确认 base.open(page.earnestPage, earnestPage.searchMouid['tr_contract']) base.input_text(earnestPage.searchMouid['apartment_code_loc'], apartmentCode) # 输入房源编号 base.click(earnestPage.searchMouid['search_button_loc']) # 搜索 base.staleness_of(earnestPage.searchMouid['tr_contract']) # 等待列表刷新 base.click(earnestPage.searchMouid['confirm_button_loc']) # 确认 base.input_text(earnestPage.confirmMould['earnest_money_loc'], earnestMoney) # 输入金额 base.type_select(earnestPage.confirmMould['payway'], 'ALIPAY') # 收款方式 base.input_text(earnestPage.confirmMould['name_loc'], 'Autotest') # 收据名字 base.type_select(earnestPage.confirmMould['company'], 'ISZTECH') # 收款公司 base.type_date(earnestPage.confirmMould['receipt_date'], datetime.date.today()) # 收款日期 base.click(earnestPage.confirmMould['submit_loc']) # 提交 base.check_submit() # 违约提交 base.click(earnestPage.searchMouid['breach_loc']) # 点击违约 base.input_text(earnestPage.confirmMould['breach_reason_loc'], u'autotest') # 输入原因 base.input_text(earnestPage.confirmMould['breach_money_loc'], 2000) # 输入违约金额 base.click(earnestPage.confirmMould['submit_loc']) # 提交 # 违约业绩生成检查 breachAchievementActiveSql = "select is_active,achieve_id from breach_achievement where object_type='EARNEST_BREACH' and apartment_code='%s' and deleted=0 and is_active='N'" % apartmentCode base.diffAssert( lambda test: asserts( sqlbase.waitData(breachAchievementActiveSql, 1)).is_true(), 1090, u'%s:房源 %s 下定违约违约业绩生成异常' % (fileName, apartmentCode)) breachAchievementInfo = sqlbase.serach(breachAchievementActiveSql) # 删除违约金记录 base.open(page.earnestBreachPage, earnestPage.searchMouid['tr_contract']) base.input_text(earnestPage.searchMouid['apartment_code_loc'], apartmentCode) # 输入房源编号 base.click(earnestPage.searchMouid['search_button_loc']) # 搜索 base.staleness_of(earnestPage.searchMouid['tr_contract']) # 等待列表刷新 base.click(earnestPage.searchMouid['delete_loc']) base.click(earnestPage.searchMouid['del_confirm_loc']) base.check_submit() # 违约业绩删除检查 time.sleep(10) breachAchievementDelSql = "select is_active,achieve_id from breach_achievement where object_type='EARNEST_BREACH' and apartment_code='%s' and deleted=0 and is_active='N'" % apartmentCode base.diffAssert( lambda test: asserts(sqlbase.get_count(breachAchievementDelSql) ).is_equal_to(0), 1090, u'%s:房源 %s 下定违约违约业绩分成明细异常' % (fileName, apartmentCode)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩更新到预估业绩排行榜) breahAchievementDetailSql = "select * from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id where ca.contract_category='EARNEST_BREACH' " \ "and ca.deleted=0 and ca.achieve_id='%s'" % breachAchievementInfo[1] achievementDetialConunt = sqlbase.get_count(breahAchievementDetailSql) base.diffAssert( lambda test: asserts(achievementDetialConunt).is_equal_to(0), 1090, u'%s:房源 %s 下定违约违约业绩分成明细异常' % (fileName, apartmentCode))
def test_1066(): """委托违约业绩由未生效变成生效""" # describe:委托合同终止结算,结算类型为业主违约,生成违约业绩 # data:1、业绩违约类别为业主违约或者公司违约;2、业绩状态为未生效且未审核;3、委托合同已复审;4、委托终止结算未复审; # result:1、业绩状态变为生效;2、业绩产生核发月份;3、业绩状态和核发月份同步更新到预估业绩排行榜;4、生效业绩加入核发业绩排行榜; fileName = 'apartmentAchievement_1066' contractSql = "select contract_num,entrust_end_date,date(sysdate()) from house_contract where contract_id not in (select house_contract.contract_id from apartment ,apartment_contract ,house_contract " \ "where house_contract.contract_id=apartment.house_contract_id and apartment.house_id=apartment_contract.house_id and apartment_contract.real_due_date>NOW()) " \ "and city_code = 330100 and audit_status = 'APPROVED'and contract_status = 'EFFECTIVE' and deleted = 0 and entrust_end_date>NOW() order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机委托合同 %s 做业主违约终止' % (fileName, contractNum)) with Base() as base: # 添加终止结算 base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage. searchMould['contract_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click( houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.wait_element( houseContractEndPage.addContractEndMould['penalty_loc']) # 等待页面出现 base.type_select(houseContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 结算类型-业主违约 endNum = 'AutoHCE' + '-' + time.strftime('%m%d%H%M') base.input_text( houseContractEndPage.addContractEndMould['end_num_loc'], endNum) base.type_date(houseContractEndPage.typeMould['end_date'], contractSql[2]) # 终止日期:当天 # 结算扣款 base.input_text( houseContractEndPage.addContractEndMould['penalty_loc'], 2000) # 违约金陪入 base.input_text( houseContractEndPage.addContractEndMould['penalty_remark_loc'], u'违约金陪入') # 备注 base.input_text( houseContractEndPage.addContractEndMould['return_rent_loc'], 5000) # 返还房租 base.input_text( houseContractEndPage.addContractEndMould['return_rent_remark_loc'], u'返还房租') # 备注 base.type_date(houseContractEndPage.typeMould['receivable_date'], contractSql[2]) # 应收日期 # 打款信息 base.type_select(houseContractEndPage.typeMould['pay_type'], 'OWNER') # 打款类别-业主收款 base.input_text( houseContractEndPage.addContractEndMould['pay_name_loc'], 'AutoTest') # 姓名 base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.upload_file( houseContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( houseContractEndPage.addContractEndMould['end_image_loc']) base.click( houseContractEndPage.addContractEndMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 # 终止结算新增检查 contractEndAdd = "select hce.end_id from house_contract hc,house_contract_end hce where hc.contract_id=hce.contract_id and hc.contract_num='%s' and hce.deleted=0 " \ "and hce.audit_status='NO_AUDIT' and hce.end_type='OWNER_DEFAULT'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1066, u'%s:委托合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH'" \ "and is_active='N'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(breachAchievementSql, 1) ).is_true(), 1066, u'%s:委托合同 %s 业主违约业绩生成异常' % (fileName, contractNum)) # 复审终止结算 houseContractEndId = sqlbase.serach(contractEndAdd)[0] audit(houseContractEndId, auditType.houseContractEnd, auditStatus.chuShen, auditStatus.fuShen) # 违约业绩生效检查 breachAchievementActiveSql = "select accounting_time,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='HOUSE_OWNER_DEFAULT_BREACH' " \ "and is_active='Y'" % contractNum if sqlbase.waitData(breachAchievementActiveSql, 1): breachAchievementInfo = sqlbase.serach(breachAchievementActiveSql) base.diffAssert( lambda test: asserts(breachAchievementInfo[0]).is_not_empty(), 1066, u'%s:委托合同 %s 业主违约违约业绩生效核发月份生成异常' % (fileName, contractNum)) # 核发业绩排行榜取值处 else: consoleLog(u'%s:委托合同 %s 业主违约违约业绩生效异常' % (fileName, contractNum), 'e') # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩核发月份同步更新到预估业绩排行榜) breahAchievementDetailSql = "select * from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id where ca.contract_category='HOUSE_OWNER_DEFAULT_BREACH' " \ "and ca.deleted=0 and ca.achieve_id='%s'and ca.achievement_month='%s'" % (breachAchievementInfo[1], breachAchievementInfo[0]) achievementDetialConunt = sqlbase.get_count(breahAchievementDetailSql) base.diffAssert( lambda test: asserts(achievementDetialConunt).is_not_equal_to(0), 1066, u'%s:委托合同 %s 业主违约违约业绩分成明细异常' % (fileName, contractNum)) # 核发业绩排行榜检查 base.open(page.achievementListPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], contractNum) # 输入合同号 base.type_select( apartmentAchievementPage.searchContractMould['category_loc'], 'HOUSE_OWNER_DEFAULT_BREACH') # 分类:业主违约 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 for i in range(achievementDetialConunt): achievement_month = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"achievement_month\"] > div').text();return a" % i, True) base.diffAssert( lambda test: asserts(achievement_month).is_equal_to( breachAchievementInfo[0]), 1042, u'%s:委托合同 %s 对应业主违约业绩有核发月份的同步到核发业绩排行榜异常' % (fileName, contractNum))
def test_1137(): """扣回业绩反审""" # describe:扣回业绩反审后同步到预估业绩排行榜,重新核算不可用 # data:1、扣回业绩状态为生效;2、扣回业绩审核状态为已审核 # result:1、业绩审核状态变为待审核;2、预估业绩排行榜中对应审核状态同步变为待审核;3、重新核算功能不可用; fileName = 'apartmentAchievement_1137' achievementSql = "select ba.contract_num,ba.apartment_code,ba.achieve_id,concat(ba.contract_end_type,'_BACK') from back_achievement ba inner join apartment a on a.apartment_code=ba.apartment_code " \ "and a.city_code=330100 where ba.is_active='Y' and ba.audit_status='APPROVED' AND ba.deleted=0 and ba.contract_end_type<>'RETREATING' and ba.create_time >'2017-01-01' order by rand() limit 1" if sqlbase.get_count(achievementSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % achievementSql) return info = sqlbase.serach(achievementSql) contractNum = info[0] consoleLog(u'%s:使用合同 %s 扣回业绩做审核' % (fileName, contractNum)) with Base() as base: base.open(page.backAchievementPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.input_text( apartmentAchievementPage.searchContractMould['contract_num_loc'], contractNum) # 输入合同号 base.input_text( apartmentAchievementPage.searchContractMould['search_address_loc'], info[1]) # 房源编号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 base.click(apartmentAchievementPage. detailAchievementMoudle['fanshen_button_loc']) base.input_text( apartmentAchievementPage. detailAchievementMoudle['contract_audit_content'], 'ok') base.click(apartmentAchievementPage. detailAchievementMoudle['contract_audit_confirm']) base.check_submit() achievementStatus = "select * from back_achievement where is_active='Y' and audit_status='AUDIT' AND deleted=0 and achieve_id='%s'" % info[ 2] base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementStatus, 1)). is_true(), 1137, u'%s:出租合同 %s 业绩反审异常' % (fileName, contractNum)) base.dblclick( apartmentAchievementPage.searchContractMould['tr_contract'], checkLoc=apartmentAchievementPage. detailAchievementMoudle['contract_num_loc']) # 点击第一条数据等待详情页面完全显示 try: base.click( apartmentAchievementPage.detailAchievementMoudle['resave_loc']) except: consoleLog(u'%s:出租合同 %s 反审后业绩无法重新核算' % (fileName, contractNum)) # 预估排行榜业绩 base.open(page.achievementListPrePage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], contractNum) # 输入合同号 base.input_text( apartmentAchievementPage.searchContractMould['search_address_loc'], info[1]) # 输入房源 base.type_select( apartmentAchievementPage.searchContractMould['category_loc'], info[3]) # 分类 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 achievementDetailCount = sqlbase.get_count( "select * from contract_achievement_detail where deleted=0 and achieve_id='%s'" % info[2]) for i in range(achievementDetailCount): achievement_audit_status = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"audit_status\"] > div').text();return a" % i, True) audit_status = u'待审核' base.diffAssert( lambda test: asserts(achievement_audit_status).is_equal_to( audit_status), 1137, u'%s:合同 %s 扣回业绩第 %s 条状态异常,期望值 %s 实际值 %s' % (fileName, contractNum, i + 1, audit_status, achievement_audit_status))
def test_1077(): """修改转租终止转租费""" # describe:出租合同转租终止结算生成违约业绩,修改转租费+100,同步到业绩中 # data:1、出租终止类型为转租;2、出租终止结算未复审;3、业绩状态未审核; # result:1、违约业绩比之前多100;2、分成人业绩同步变化;3、预估业绩排行榜同步更新; fileName = 'apartmentAchievement_1077' contractSql = "SELECT contract_num,rent_end_date,date(sysdate()) from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' and rent_end_date>DATE_ADD(date(SYSDATE()),INTERVAL 1 MONTH)order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做转租终止' % (fileName, contractNum)) with Base() as base: breach_money = '888.88' # 应收违约金 zhuanzu_money = '666.66' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text(apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编 base.click(apartmentContractEndPage.addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage.addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc']) # 立即终止 base.input_text(apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'转租') # 终止原因 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.type_date(apartmentContractEndPage.typeMould['end_date'], info[2]) # 终止日期:当天 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'CORPORATE_DEFAULT') # 转租 base.input_text(apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_select(apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text(apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys(apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage.addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick(apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage.addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick(apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text(apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.upload_file(apartmentContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element(apartmentContractEndPage.addContractEndMould['end_image_loc']) base.input_text(apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage.addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 # 违约业绩检查 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='CUSTOMER_SUBLET'" % contractNum if sqlbase.waitData(breachAchievementSql, 1): breachAchievementInfo = sqlbase.serach(breachAchievementSql) base.diffAssert(lambda test: asserts(breachAchievementInfo[1]).is_equal_to(zhuanzu_money), 1077, u'%s:出租合同 %s 转租违约业绩金额异常,期望值 %s 实际值 %s' % (fileName, contractNum, zhuanzu_money, breachAchievementInfo[1])) else: consoleLog(u'%s:出租合同 %s 转租终止生成违约业绩异常,执行SQL:%s' % (fileName, contractNum, breachAchievementSql)) # 修改终止结算转租费 base.open(page.contractEndPage, apartmentContractEndPage.searchMould['tr_contract_end']) base.input_text(apartmentContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(apartmentContractEndPage.searchMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage.searchMould['tr_contract_end']) # 等待列表刷新 base.dblclick(apartmentContractEndPage.searchMould['tr_contract_end']) # 双击第一条数据 zhuanzu_money_new = float(zhuanzu_money)+100 base.input_text(apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest2') # 备注 base.dblclick(apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text(apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], str(zhuanzu_money_new)) # 应收转租金 base.click(apartmentContractEndPage.addContractEndMould['save_button']) # 保存 base.check_submit() # 获取修改后业绩数据 time.sleep(10) breachAchievementNewSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='CUSTOMER_SUBLET'" % contractNum breachAchievementNewInfo = sqlbase.serach(breachAchievementNewSql) breachAchievementNew=breachAchievementNewInfo[1] base.diffAssert(lambda test: asserts(breachAchievementNew).is_equal_to(str(zhuanzu_money_new)) , 1077, u'%s:出租合同 %s 转租终止违约修改转租费后,违约业绩异常,期望值 %s 实际值 %s' % (fileName, contractNum, zhuanzu_money_new, breachAchievementNew)) # base.diffAssert(lambda test: asserts(personAchievementNew).is_not_equal_to(personAchievementOld), 1077, # u'%s:出租合同 %s 转租终止违约修改转租费后,违约业绩分成明细异常,期望值不为 %s 实际值 %s' % (fileName, contractNum, personAchievementOld, personAchievementNew)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩同步更新到预估业绩排行榜) breahAchievementDetailSql = "select ca.receivable from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id inner " \ "join breach_achievement ba on ba.achieve_id=ca.achieve_id and ba.breach_type='CUSTOMER_SUBLET' and ba.deleted=0 and ba.breach_num='%s'" \ "where ca.contract_category='CUSTOMER_SUBLET' and ca.deleted=0 " % contractNum prebreachAchievement = sqlbase.serach(breahAchievementDetailSql)[0] base.diffAssert(lambda test: asserts(prebreachAchievement).is_equal_to(str(zhuanzu_money_new)), 1077, u'%s:出租合同 %s 转租终止违约修改转租费后,业绩分成明细业绩金额异常,实际值 %s 期望值 %s' % (fileName, contractNum, prebreachAchievement, zhuanzu_money_new))
def test_1001(): """出租合同签约周期小于一个月""" # describe:检测出租合同是否可以小于一个月 # data:房源为整租,服务公寓,合同周期小于一个月 # result:1.合同创建成功2.生成出单业绩 fileName = 'apartmentContract_1001' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc ON hc.contract_id = a.house_contract_id " \ "AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' inner join query_apartment qa on qa.apartment_code=a.apartment_code " \ "WHERE a.deleted = 0 AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'ENTIRE' AND a.rent_status='WAITING_RENT' AND hc.apartment_type='MANAGE' " \ "AND hc.real_due_date>date_add(date(sysdate()), interval 1 MONTH) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] consoleLog(u'%s:使用房源 %s 签约承租合同' % (fileName, apartmentCode)) with Base() as base: base.open(page.customerListPage, apartmentContractPage.customerSignMould['tr_customer']) try: base.find_element(By.ID, 'search_btn').click() base.staleness_of(apartmentContractPage. customerSignMould['tr_customer']) # 搜索等待列表刷新 except: base.click((By.CSS_SELECTOR, '.panel.window > div:nth-child(1) > div.panel-tool > a' )) # 可能会有分配租客的弹窗出现,此为关闭 customerCode = base.script( "var a = $('[datagrid-row-index=\"0\"] > [field=\"customer_num\"] > div > font').text();return a", True).decode('utf-8') # 获取第一条数据编号 base.input_text( apartmentContractPage. customerSignMould['search_customer_name_loc'], customerCode) base.click( apartmentContractPage.customerSignMould['search_button_loc']) base.staleness_of( apartmentContractPage.customerSignMould['tr_customer']) # 搜索等待列表刷新 base.script("$('button#edit_btn')[2].click()") # 点击列表页第一行的签约 base.input_text( apartmentContractPage.customerSignMould['search_apartment_loc'], apartmentCode) # 房源编号 base.click( apartmentContractPage.customerSignMould['house_search_btn']) # 搜索 base.staleness_of( apartmentContractPage.customerSignMould['entire_apartment_loc'] ) # 搜索等待列表刷新 try: base.dblclick( apartmentContractPage. customerSignMould['entire_apartment_loc'], checkLoc=apartmentContractPage.addApartmentContractMould[ 'contract_num_loc']) # 对查询结果的第一条房源数据双击发起签约 except: base.click(apartmentContractPage. customerSignMould['newsign_button_loc']) # 新签 # 获取房源合同时间元素 randomHouseContract = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_add(date(sysdate()), interval 15 DAY) " "from house_contract where contract_num = '%s'" % info[2]) contractNum = 'AutoTest' + '-' + time.strftime('%m%d%H%M%S') base.input_text(apartmentContractPage. addApartmentContractMould['contract_num_loc'], contractNum) # 合同编号 base.type_date(apartmentContractPage.typeMould['sign_date'], randomHouseContract[2]) # 签约日期 base.type_date(apartmentContractPage.typeMould['rent_start_date'], randomHouseContract[3]) # 承租起算日 base.type_date(apartmentContractPage.typeMould['rent_end_date'], randomHouseContract[4]) # 承租到期日 base.input_text( apartmentContractPage.addApartmentContractMould['deposit_loc'], 1234) # 押金 base.type_select(apartmentContractPage.typeMould['payment_type'], 'NORMAL') # 正常付款 base.type_select(apartmentContractPage.typeMould['payment_cycle'], 'ALL') # 一次性付款 js = "$('#contract_strategy_table > table > tbody > tr > td:nth-child(8) > input').val('%s')" % randomHouseContract[ 4] base.script(js) base.click( apartmentContractPage. addApartmentContractMould['rent_strategy_contain_loc']) # 月租金包含按钮 base.type_select(apartmentContractPage.typeMould['contain_fee_type'], 'PARKING') # 包含车位费 base.input_text( apartmentContractPage.addApartmentContractMould['contain_fee_loc'], 123) # 车位费 base.click(apartmentContractPage. addApartmentContractMould['contain_fee_save_loc']) # 保存包含 base.input_text( apartmentContractPage.addApartmentContractMould['agent_fee_loc'], 234) # 中介服务费 base.input_text( apartmentContractPage.addApartmentContractMould['remark_loc'], 'this is autotest date') # 备注 base.click(apartmentContractPage. addApartmentContractMould['next_loc_1']) # 第一页下一步 base.click(apartmentContractPage. addApartmentContractMould['next_loc_2']) # 第二页下一步 # 租客详情 base.input_text( apartmentContractPage.addApartmentContractMould['sign_name_loc'], u'AutoTest') # 签约人姓名 base.type_select(apartmentContractPage.typeMould['sign_id_type'], 'IDNO') # 证件类型 base.input_text( apartmentContractPage.addApartmentContractMould['sign_id_no_loc'], '42062119910828541X') # 身份证 base.input_text( apartmentContractPage.addApartmentContractMould['sign_phone_loc'], '15168368432') # 手机号 base.input_text(apartmentContractPage. addApartmentContractMould['sign_address_loc'], u'浙江省杭州市滨江区六和路368号海创基地南楼三层') # 地址 base.type_select(apartmentContractPage.typeMould['sign_is_customer'], 'Y') # 为承租人 base.input_text(apartmentContractPage. addApartmentContractMould['urgent_customer_name_loc'], 'AutoTest') # 紧急联系人 base.input_text(apartmentContractPage. addApartmentContractMould['urgent_phone_loc'], '13666666666') # 紧急联系人号码 base.type_select(apartmentContractPage.typeMould['urgent_card_type'], 'IDNO') # 紧急联系人证件类型 base.input_text(apartmentContractPage. addApartmentContractMould['urgent_id_card_loc'], '42062119910828541X') # 紧急联系人证件号码 base.input_text(apartmentContractPage. addApartmentContractMould['urgent_postal_address_loc'], u'浙江省杭州市滨江区六和路368号海创基地南楼三层') # 紧急联系人地址 base.type_select(apartmentContractPage.typeMould['customer_type'], 'EMPLOYEE') # 租客类型 base.type_select(apartmentContractPage.typeMould['gender'], 'MALE') # 租客性别 base.type_select(apartmentContractPage.typeMould['education'], 'BACHELOR') # 学历 base.input_text( apartmentContractPage.addApartmentContractMould['trade_loc'], u'计算机软件') # 行业 base.input_text( apartmentContractPage.addApartmentContractMould['email_loc'], '*****@*****.**') # 邮件 base.type_select(apartmentContractPage.typeMould['yesNo'], 'Y') # 是否入住 base.click(apartmentContractPage. addApartmentContractMould['add_person_loc']) # 新增入住人 base.input_text( apartmentContractPage.addApartmentContractMould['person_name_loc'], 'test') # 入住人姓名 base.type_select(apartmentContractPage.typeMould['cardType'], 'PASSPORT') # 证件类型 base.input_text(apartmentContractPage. addApartmentContractMould['person_cardType_loc'], 'abcdefghijk') # 证件号 base.type_select(apartmentContractPage.typeMould['sex'], 'MALE') # 性别 base.input_text(apartmentContractPage. addApartmentContractMould['person_phone_loc'], '13777777777') # 号码 base.type_date(apartmentContractPage.typeMould['staydate'], randomHouseContract[3]) # 入住日期 base.click(apartmentContractPage. addApartmentContractMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 contractAdd = "select * from apartment a,apartment_contract ac ,apartment_contract_relation acr where a.apartment_id=acr.apartment_id and acr.contract_id=ac.contract_id " \ "and a.apartment_code='%s'AND ac.contract_num = '%s'AND ac.audit_status='AUDIT' and ac.contract_type = 'NEWSIGN' AND ac.entrust_type='ENTIRE' " \ "AND ac.is_active='Y' " % (apartmentCode, contractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(contractAdd, 1)).is_true(), 1001, u'%s:出租合同 %s 新增失败,执行SQL:%s' % (fileName, contractNum, contractAdd)) achievementsqla = "select * from apartment_contract_achievement where contract_num='%s' and is_active='N' and accounting_num=1 and audit_status='AUDIT' and deleted=0 " % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsqla, 1)).is_true( ), 1001, u'%s:合同 %s 对应业绩未生成' % (fileName, contractNum))
def test_1061(): """转租生成违约业绩""" # describe:出租合同转租终止结算生成违约业绩,记录同步到预估业绩排行榜 # data:1、出租合同状态为有效;2、出租合同审核状态为已复审;3、应收违约金大于0;4、应收转租费大于0 # result:1、合同状态变为转租;2、生成一条违约业绩,状态为未生效;3、违约业绩金额等于应收转租费;4、违约业绩分成记录插入到预估业绩排行榜; fileName = 'apartmentAchievement_1061' contractSql = "SELECT contract_num,rent_end_date,date(sysdate()) from apartment_contract where deleted = 0 and city_code = 330100 and audit_status = 'APPROVED' and contract_status = 'EFFECTIVE' " \ "and contract_type = 'NEWSIGN' and entrust_type = 'SHARE' and payment_type<>'NETWORKBANK' and rent_end_date>DATE_ADD(date(SYSDATE()),INTERVAL 1 MONTH)order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取随机出租合同 %s 做转租终止' % (fileName, contractNum)) with Base() as base: breach_money = '888.88' # 应收违约金 zhuanzu_money = '666.66' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text( apartmentContractEndPage.addContractEndMould['contract_num_loc'], contractNum) # 输入合同编 base.click(apartmentContractEndPage. addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage. addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage. addContractEndMould['tr_contract']) # 右击第一条数据 base.click( apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc'] ) # 立即终止 base.input_text( apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'承租周期已完') # 终止原因 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.type_date(apartmentContractEndPage.typeMould['end_date'], info[2]) # 终止日期:当天 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'CORPORATE_DEFAULT') # 退租 base.input_text( apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_select( apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage. addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage. addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text( apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.upload_file( apartmentContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( apartmentContractEndPage.addContractEndMould['end_image_loc']) base.input_text( apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage. addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 contractEndAdd = "SELECT ace.end_contract_num FROM apartment_contract ac,apartment_contract_end ace WHERE ac.contract_id = ace.contract_id " \ "and ace.audit_status='NO_AUDIT' AND ace.end_type='CORPORATE_DEFAULT'and ace.deleted=0 and ac.contract_num='%s'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1061, u'%s:出租合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 合同状态检查 contractStatus = sqlbase.serach( "select contract_status from apartment_contract where deleted = 0 and contract_num='%s' " % contractNum)[0] base.diffAssert( lambda test: asserts(contractStatus).is_equal_to( 'CORPORATE_DEFAULT'), 1061, u'%s:出租合同 %s 终止结算后状态异常异常,期望值 CORPORATE_DEFAULT 实际值 %s' % (fileName, contractNum, contractStatus)) # 违约业绩检查 breachAchievementSql = "select is_active,accounting_money,achieve_id from breach_achievement where breach_num='%s' and deleted=0 and breach_type='CUSTOMER_SUBLET'" % contractNum if sqlbase.waitData(breachAchievementSql, 1): breachAchievementInfo = sqlbase.serach(breachAchievementSql) base.diffAssert( lambda test: asserts(breachAchievementInfo[0]).is_equal_to( 'N'), 1061, u'%s:出租合同 %s 转租违约业绩状态异常,期望值 N 实际值 %s' % (fileName, contractNum, breachAchievementInfo[0])) base.diffAssert( lambda test: asserts(breachAchievementInfo[1]).is_equal_to( zhuanzu_money), 1061, u'%s:出租合同 %s 转租违约业绩金额异常,期望值 %s 实际值 %s' % (fileName, contractNum, zhuanzu_money, breachAchievementInfo[1])) else: consoleLog(u'%s:出租合同 %s 转租终止生成违约业绩异常,执行SQL:%s' % (fileName, contractNum, breachAchievementSql)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩同步更新到预估业绩排行榜) breahAchievementDetailSql = "select * from contract_achievement ca inner join contract_achievement_detail cad on ca.achieve_id=cad.achieve_id where ca.contract_category='CUSTOMER_SUBLET' " \ "and ca.deleted=0 and ca.achieve_id='%s'" % breachAchievementInfo[2] achievementDetialConunt = sqlbase.get_count(breahAchievementDetailSql) base.diffAssert( lambda test: asserts(achievementDetialConunt).is_not_equal_to(0), 1061, u'%s:出租合同 %s 转租终止违约业绩分成明细异常' % (fileName, contractNum))
def test_1039(): """承租周期大于一年且小于18个月生成两条业绩""" # describe: 承租周期大于一年且小于18个月,生成两条业绩 # data:1、房源已定价2、设计工程已交房;3、有装修成本;4、房源类型为合租;5、出租合同承租周期为16个月;6、承租到期日不等于委托延长到期日; # result:1、生成一条未生效业绩,其出租核算周期为12个月;2、生成一条未起算业绩,其出租核算周期为4个月; fileName = 'apartmentAchievement_1039' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' WHERE a.deleted = 0 " \ "AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT'" \ "AND hc.delay_date>date_add(date(sysdate()), interval 16 month) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'SQL查无数据!', level='w') consoleLog(u'执行SQL:%s' % randomApartment.encode('utf-8')) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] apartmentId = info[1] consoleLog(u'使用房源 %s 签约出租合同' % apartmentCode) dateInfo = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_add(date(sysdate()), interval 16 month) " "from house_contract where contract_num = '%s'" % info[2]) # 获取房源合同时间元素 with Base() as base: # 创建出租合同 customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=5500, sign_date=dateInfo[2], rent_start_date=dateInfo[3], rent_end_date=dateInfo[4], deposit=2000, payment_cycle='TOW_MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] # 出租合同检查 contractAdd = "select * from apartment a,apartment_contract ac ,apartment_contract_relation acr where a.apartment_id=acr.apartment_id and acr.contract_id=ac.contract_id " \ "and a.apartment_code='%s'AND ac.contract_num = '%s'AND ac.audit_status='AUDIT' and ac.contract_type = 'NEWSIGN' AND ac.entrust_type='SHARE' " \ "AND ac.is_active='Y' " % (apartmentCode, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(contractAdd, 1)).is_true(), 1039, u'%s:出租合同 %s 新增失败,执行SQL:%s' % (fileName, apartmentContractNum, contractAdd)) # 业绩检查 achievementsqla = "select aca.is_active,aca.audit_status,aca.accounting_time from apartment_contract_achievement aca inner join apartment a on a.apartment_code=aca.house_code " \ "where contract_num='%s' and a.apartment_code='%s'and aca.deleted=0 " % (apartmentContractNum, apartmentCode) if sqlbase.waitData(achievementsqla, 2): # 第一条业绩 achievementsqlb = "select is_active,audit_status,accounting_time from apartment_contract_achievement where accounting_num=1 and start_time='%s' " \ "and end_time=date_add(date('%s'), interval 1 year) and contract_num='%s'" % (dateInfo[3], dateInfo[2], apartmentContractNum) achievementinfob = sqlbase.serach(achievementsqlb) # 第一条业绩 base.diffAssert( lambda test: asserts(sqlbase.get_count(achievementsqlb)). is_equal_to(1), 1039, u'%s:合同 %s 对应核算周期为12个月的业绩生成异常' % (fileName, apartmentContractNum)) base.diffAssert( lambda test: asserts(achievementinfob[1]).is_equal_to('AUDIT'), 1039, u'%s:合同 %s 对应业绩审核状态异常, 期望值 AUDIT 实际值 %s' % (fileName, apartmentContractNum, achievementinfob[1])) base.diffAssert( lambda test: asserts(achievementinfob[0]).is_equal_to('N'), 1039, u'%s:合同 %s 对应业绩生效状态异常, 期望值 N 实际值 %s' % (fileName, apartmentContractNum, achievementinfob[0])) # 第二条业绩 achievementsqlc = "select is_active,audit_status,accounting_time from apartment_contract_achievement where accounting_num=2 and start_time=date_add(date('%s'), interval 1 year) " \ "and end_time='%s'and contract_num='%s'" % (dateInfo[3], dateInfo[4],apartmentContractNum) achievementinfoc = sqlbase.serach(achievementsqlc) base.diffAssert( lambda test: asserts(sqlbase.get_count(achievementsqlc)). is_equal_to(1), 1039, u'%s:合同 %s 对应核算周期为12个月的业绩生成异常' % (fileName, apartmentContractNum)) base.diffAssert( lambda test: asserts(achievementinfoc[1]).is_equal_to('AUDIT'), 1039, u'%s:合同 %s 对应业绩审核状态异常, 期望值 AUDIT 实际值 %s' % (fileName, apartmentContractNum, achievementinfob[1])) base.diffAssert( lambda test: asserts(achievementinfoc[0]).is_equal_to( 'UNCALCULATE'), 1039, u'%s:合同 %s 对应业绩生效状态异常, 期望值 UNCALCULATE 实际值 %s' % (fileName, apartmentContractNum, achievementinfob[0])) else: consoleLog(u'%s:合同 %s 对应业绩生成异常' % (fileName, apartmentContractNum), 'e') consoleLog(u'执行SQL:%s' % achievementsqla)
def test_1067(): """扣回业绩由未生效变成生效""" # describe: 核发月份条件满足后生成核发月份 # data:1、业绩违约类别为退租、换租、收房、转租;2、业绩状态为未生效且未审核;3、正常出房业绩条件全部达成;4、出租终止结算未复审; # result:1、业绩状态变为生效;2、业绩产生核发月份;3、业绩状态和核发月份同步更新到预估业绩排行榜;4、生效业绩加入核发业绩排行榜; fileName = 'apartmentAchievement_1067' randomApartment = "SELECT a.apartment_code,a.apartment_id,hc.contract_num,hc.contract_id FROM apartment a INNER JOIN house_contract hc " \ "ON hc.contract_id = a.house_contract_id AND hc.is_active = 'Y' AND hc.deleted = 0 AND hc.audit_status='APPROVED' AND hc.contract_status = 'EFFECTIVE' " \ "INNER JOIN fitment_house fh on fh.house_id=hc.house_id AND fh.fitment_status='HANDOVER' WHERE a.deleted = 0 " \ "AND a.rent_price > 0 AND a.city_code = 330100 AND hc.entrust_type = 'SHARE' AND a.rent_status='WAITING_RENT'" \ "AND hc.real_due_date>date_add(date(sysdate()), interval 1 YEAR) ORDER BY RAND() LIMIT 1" if sqlbase.get_count(randomApartment) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % randomApartment) return info = sqlbase.serach(randomApartment) apartmentCode = info[0] apartmentId = info[1] consoleLog(u'%s:使用房源 %s 签约出租合同做退租违约' % (fileName, apartmentCode)) dateInfo = sqlbase.serach( "SELECT entrust_start_date,entrust_end_date,date(sysdate()),date_add(date(sysdate()), interval 1 DAY),date_add(date(sysdate()), interval 6 month) " "from house_contract where contract_num = '%s'" % info[2]) # 获取时间元素 with Base() as base: customer = createCustomer() rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[2], rent_start_date=dateInfo[3], rent_end_date=dateInfo[4], deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] apartmentContractId = apartmentContractInfo['contractID'] # 出租合同审核 audit(apartmentContractId, auditType.apartmentContract, auditStatus.chuShen, auditStatus.fuShen) # 出租合同应收 base.open( page.apartmentContractPayPage, apartmentContractReceivablePage.searchMould['tr_receviable_loc']) base.click(apartmentContractReceivablePage.searchMould['reset_button']) base.staleness_of( apartmentContractReceivablePage.searchMould['tr_receviable_loc']) base.input_text( apartmentContractReceivablePage.searchMould['contractNum_loc'], apartmentContractNum) base.click( apartmentContractReceivablePage.searchMould['search_button']) base.staleness_of( apartmentContractReceivablePage.searchMould['tr_receviable_loc']) moneyType = { u'首期管家服务费': int(0.07 * rentPrice), u'中介服务费': 1000, u'首期租金': int(rentPrice), u'押金': int(rentPrice) } for i in range(3): moneyType_row = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"money_type\"] > div').text();return a" % i, True) base.click( apartmentContractReceivablePage.searchMould['receviabl_button'] [i]) base.input_text( apartmentContractReceivablePage. detailMould['receipts_money_loc'], moneyType[moneyType_row]) base.click( apartmentContractReceivablePage.detailMould['receipts_type']) base.type_date( apartmentContractReceivablePage. detailMould['receipts_date_loc'], rentPriceInfo[1]) base.input_text( apartmentContractReceivablePage.detailMould['alipay_card_loc'], '13676595110') base.input_text( apartmentContractReceivablePage. detailMould['operation_total_loc'], moneyType[moneyType_row]) base.click( apartmentContractReceivablePage.detailMould['save_button']) base.check_submit() base.click( apartmentContractReceivablePage.detailMould['print_btn_close']) time.sleep(1) # 出房业绩达成检查 achievementsql = "select aca.is_active,aca.audit_status,aca.accounting_time,aca.achievement_id from apartment_contract_achievement aca inner join apartment a " \ "on a.apartment_code=aca.house_code where contract_num='%s' and a.apartment_code='%s'and aca.deleted=0 and aca.is_active='Y' and aca.accounting_time " \ "is not null" % (apartmentContractNum, apartmentCode) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsql, 1)).is_true( ), 1067, u'%s:出租合同 %s 出房业绩生效异常,执行SQL:%s' % (fileName, apartmentContractNum, achievementsql)) # 出租合同终止结算 breach_money = '888.88' # 应收违约金 zhuanzu_money = '666.66' # 转租费 base.open(page.apartmentContractPage, apartmentContractEndPage.addContractEndMould['tr_contract']) base.input_text( apartmentContractEndPage.addContractEndMould['contract_num_loc'], apartmentContractNum) # 输入合同编 base.click(apartmentContractEndPage. addContractEndMould['search_button_loc']) # 搜索 base.staleness_of(apartmentContractEndPage. addContractEndMould['tr_contract']) # 等待列表刷新 base.context_click(apartmentContractEndPage. addContractEndMould['tr_contract']) # 右击第一条数据 base.click( apartmentContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.click(apartmentContractEndPage.addContractEndMould['now_end_loc'] ) # 立即终止 base.input_text( apartmentContractEndPage.addContractEndMould['end_reason_loc'], u'退租') # 终止原因 endNum = 'AutoACE' + '-' + time.strftime('%m%d%H%M') base.type_date(apartmentContractEndPage.typeMould['end_date'], info[2]) # 终止日期:当天 base.type_select(apartmentContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 退租 base.input_text( apartmentContractEndPage.addContractEndMould['end_num_loc'], endNum) # 终止协议号 base.type_select( apartmentContractEndPage.typeMould['receipt_type_loc'], 'PAYER') # 承租人 base.type_select(apartmentContractEndPage.typeMould['pay_type_loc'], 'PERSONAL') # 个人 base.input_text( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], '123456789') # 收款卡号 base.send_keys( apartmentContractEndPage.addContractEndMould['receipt_num_loc'], Keys.ENTER) base.click(apartmentContractEndPage. addContractEndMould['cardconfirm_close_loc']) # 银行卡确认无误 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=12) # 违约金 base.input_text(apartmentContractEndPage. addContractEndMould['receivable_money_loc'], breach_money) # 应收违约金 base.dblclick( apartmentContractEndPage.addContractEndMould['weiyuejin_loc'], index=21) # 转租费 base.input_text( apartmentContractEndPage.addContractEndMould['zhuanzu_money_loc'], zhuanzu_money) # 应收转租金 base.upload_file( apartmentContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( apartmentContractEndPage.addContractEndMould['end_image_loc']) base.input_text( apartmentContractEndPage.addContractEndMould['remark_loc'], 'AutoTest') # 备注 base.click(apartmentContractEndPage. addContractEndMould['submit_button']) # 提交 base.check_submit() # 等待提交完成 contractEndAdd = "SELECT ace.end_contract_num,ace.end_id FROM apartment_contract ac,apartment_contract_end ace WHERE ac.contract_id = ace.contract_id " \ "and ace.audit_status='NO_AUDIT' AND ace.end_type='OWNER_DEFAULT'and ace.deleted=0 and ac.contract_num='%s'" % apartmentContractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1067, u'%s:出租合同 %s 终止结算新增异常,执行SQL:%s' % (fileName, apartmentContractNum, contractEndAdd)) apartmentContractEndId = sqlbase.serach(contractEndAdd)[1] audit(apartmentContractEndId, auditType.apartmentContractEnd, auditStatus.chuShen, auditStatus.fuShen) # 终止结算审核 # 扣回业绩生效检查 backAchievementSql = "select is_active,achieve_id,accounting_time from back_achievement where contract_num='%s' and deleted=0 and contract_end_type='OWNER_DEFAULT' " \ "and accounting_time is not null" % apartmentContractNum if sqlbase.waitData(backAchievementSql, 1): backAchievementInfo = sqlbase.serach(backAchievementSql) else: consoleLog(u'%s:出租合同 %s 退租终止生成扣回业绩异常,执行SQL:%s' % (fileName, apartmentContractNum, backAchievementSql)) # 业绩分成明细表(预估业绩排行榜数据取值表,检查违约业绩同步更新到预估业绩排行榜) backAchievementDetailSql = "select date_format(ca.achievement_month,'%%Y-%%m') from contract_achievement ca inner join apartment_contract ac on ac.contract_id=ca.contract_id and ca.achieve_id='%s' inner join contract_achievement_detail cad " \ "on cad.achieve_id=ca.achieve_id where ca.deleted=0 and ca.contract_category='OWNER_DEFAULT_BACK'" % backAchievementInfo[1] achievementDetialConunt = sqlbase.get_count(backAchievementDetailSql) base.diffAssert( lambda test: asserts(sqlbase.serach(backAchievementDetailSql)[0] ).is_equal_to(backAchievementInfo[2]), 1167, u'%s:出租合同 %s 退租终止扣回业绩分成明细核发月份生成异常' % (fileName, apartmentContractNum)) # 核发业绩排行榜检查 base.open(page.achievementListPage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], apartmentContractNum) # 输入合同号 base.type_select( apartmentAchievementPage.searchContractMould['category_loc'], 'OWNER_DEFAULT_BACK') # 分类:退租扣回 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 base.staleness_of(apartmentAchievementPage. searchContractMould['tr_contract']) # 等待第一条数据刷新 for i in range(achievementDetialConunt): achievement_month = base.script( "var a = $('[datagrid-row-index=\"%s\"] > [field=\"achievement_month\"] > div').text();return a" % i, True) base.diffAssert( lambda test: asserts(achievement_month).is_equal_to( backAchievementInfo[2]), 1067, u'%s:出租合同 %s 对应退租终止违约业绩有核发月份的同步到核发业绩排行榜异常' % (fileName, apartmentContractNum))
def test_1046(): """修改免租期""" # describe:在委托合同详情中,修改业绩核算周期对应时间段的委托合同租金策略中的免租期; # data:1、业绩审核状态为待审核;2、委托合同状态为待审核或者已初审;3、提前记录原业绩中的核算收进价和差价业绩; # result:1、新产生的业绩中核算收进价与原记录不同;2、新的差价业绩与原来的值不同; fileName = 'apartmentAchievement_1046' with Base() as base: # 创建委托合同和出租合同 houseSql = sqlbase.serach( "select house_id,residential_id,building_id,house_code from house where deleted=0 and city_code=330100 order by rand() limit 1" ) # 获取随机开发房源 houseInfo = { 'houseID': houseSql[0], 'residentialID': houseSql[1], 'buildingID': houseSql[2], 'houseCode': houseSql[3] } dateInfo = sqlbase.serach( "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 2 year),date_add(date(sysdate()),interval 27 month)," "date_add(date(sysdate()),INTERVAL 1 month),date_add(date(sysdate()),INTERVAL 6 month),date_add(date(sysdate()),INTERVAL 10 day) from dual" ) # 日期元素 apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[2], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=3000, parking=100, year_service_fee=500, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888, houseInfo=houseInfo) rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[5], # 承租6个月 deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] # 业绩检查 achievementSql = "select substring_index(aca.house_code,'-',1),aca.is_active,aca.audit_status,aca.contract_audit_status,aca.profits_fee,aca.rent_cost from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % (apartmentId, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementSql, 1)).is_true( ), 1046, u'%s:合同 %s 业绩生成异常' % (fileName, apartmentContractNum)) achievementInfo = sqlbase.serach(achievementSql) profits_fee_old = achievementInfo[4] # 差价业绩 rent_cost_old = achievementInfo[5] # 核算收进价 houseCode = achievementInfo[0] # 修改租金策略并且复审 base.open(page.entrustContractPage, houseContractPage.contractSearchMould['tr_contract']) base.input_text( houseContractPage.contractSearchMould['residential_name_loc'], houseCode) base.click( houseContractPage.contractSearchMould['search_button_loc']) # 搜索 base.staleness_of( houseContractPage.contractSearchMould['tr_contract']) # 等待列表刷新 base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage. addHouseContractMould['contract_num_loc']) # 双击第一条数据 time.sleep(3) base.script( "$('#contract_strategy_table0 tr>td:nth-child(11)>input').click()") base.script( "$('#contract_strategy_table0 tr>td:nth-child(11)>input').datebox('setValue','%s')" % dateInfo[6]) base.click( houseContractPage.addHouseContractMould['page1_save_button']) # 保存 try: base.check_submit() except: message = base.script( "var a=$('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) messagehope = u'用户数据已经被其他用户更新' if messagehope in message: base.click(houseContractPage. addHouseContractMould['message_close_loc']) # 关闭提示 base.click(houseContractPage. addHouseContractMould['page1_save_button']) # 保存 base.check_submit() # 委托合同复审 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=1) # 租金页面 base.click(houseContractPage. addHouseContractMould['rent_detail_selectAll']) # 全选 base.click( houseContractPage.addHouseContractMould['rent_audit_loc']) # 审核 base.click( houseContractPage.addHouseContractMould['audit_pass_loc']) # 通过 base.click(houseContractPage. addHouseContractMould['rent_audit_confirm']) # 确认 # 初审 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) # 最后一页 time.sleep(2) base.script('$("button[status=\'PASS\']")[2].click()') # 初审 base.click(houseContractPage. addHouseContractMould['contract_audit_confirm']) # 确认 for i in range(3): try: base.staleness_of(houseContractPage. contractSearchMould['tr_contract']) # 等待数据刷新 break except: message = base.script( "var a=$('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) messagehope = u'用户数据已经被其他用户更新' if messagehope in message: base.click( houseContractPage. addHouseContractMould['message_close_loc']) # 关闭提示 base.click( houseContractPage. addHouseContractMould['contract_audit_confirm']) # 确认 base.staleness_of( houseContractPage.contractSearchMould['tr_contract'] ) # 等待数据刷新 # 复审 base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage. addHouseContractMould['contract_num_loc']) # 双击第一条数据 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) # 最后一页 time.sleep(2) base.script('$("button[status=\'APPROVED\']")[1].click()') # 复审 base.click(houseContractPage. addHouseContractMould['rentdif_cofirm_loc']) # 租金策略不同提示确定 base.click(houseContractPage. addHouseContractMould['contract_audit_confirm']) # 确认 base.check_submit() # 获取最新的核算收进价和差价业绩 time.sleep(10) profits_fee_new = sqlbase.serach(achievementSql)[4] rent_cost_new = sqlbase.serach(achievementSql)[5] base.diffAssert( lambda test: asserts(rent_cost_new).is_not_equal_to(rent_cost_old), 1046, u'%s:出租合同 %s 对应委托免租期修改后业绩中核算收进价异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, rent_cost_old, rent_cost_new)) base.diffAssert( lambda test: asserts(profits_fee_new).is_not_equal_to( profits_fee_old), 1046, u'%s:出租合同 %s 对应委托成本修改后业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_fee_old, profits_fee_new))
def test_1054(): """出单业绩删除""" # describe: 删除业绩对应的出租合同,业绩状态变为已失效; # data:1、业绩审核状态为未审核;2、业绩状态为生效;3、出租合同未终止结算且未续签 # result:11、业绩从出单业绩列表中删除;2、分成记录从预估业绩排行榜中删除;3、有核发月份的分成记录还需要从核发业绩排行榜中删除 fileName = 'apartmentAchievement_1054' with Base() as base: # 创建房源,委托合同 dateSql = "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 1 year),date_add(date(sysdate()),interval 3 year),date_add(date(sysdate()),INTERVAL 1 month) from dual" dateInfo = sqlbase.serach(dateSql) apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[3], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=1234, parking=123, year_service_fee=321, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888) # 创建租客,出租合同 customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=5500, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[2], deposit=2000, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] # 出租合同检查 contractAdd = "select * from apartment a,apartment_contract ac ,apartment_contract_relation acr where a.apartment_id=acr.apartment_id and acr.contract_id=ac.contract_id " \ "and a.apartment_id='%s'AND ac.contract_num = '%s'AND ac.audit_status='AUDIT' and ac.contract_type = 'NEWSIGN' AND ac.entrust_type='SHARE' " \ "AND ac.is_active='Y' " % (apartmentId, apartmentContractNum) # 业绩检查 achievementsqla = "select aca.is_active,aca.audit_status,aca.accounting_time from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % (apartmentId,apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsqla, 1)).is_true( ), 1054, u'%s:合同 %s 对应业绩生成异常' % (fileName, apartmentContractNum)) # 删除出租合同 base.open(page.apartmentContractPage, apartmentContractPage.searchContractMould['tr_contract']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同编号 base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.context_click( apartmentContractPage.searchContractMould['tr_contract']) base.click(apartmentContractPage.searchContractMould['delete_loc']) base.click(apartmentContractPage. addApartmentContractMould['delete_button_confirm']) base.check_submit() time.sleep(10) achievementsqla = "select aca.is_active,aca.audit_status,aca.accounting_time from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % (apartmentId,apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.get_count(achievementsqla) ).is_equal_to(0), 1054, u'%s:合同 %s 对应业绩删除异常' % (fileName, apartmentContractNum)) # 预估业绩排行榜 base.open(page.achievementListPrePage, apartmentAchievementPage.searchContractMould['tr_contract']) base.click(apartmentAchievementPage. searchContractMould['reset_button_loc']) # 重置 base.staleness_of( apartmentAchievementPage.searchContractMould['tr_contract']) base.input_text(apartmentAchievementPage. searchContractMould['contract_num_hefa_loc'], apartmentContractNum) # 输入合同号 base.click(apartmentAchievementPage. searchContractMould['search_button_loc']) # 查找 try: base.wait_element( apartmentAchievementPage.searchContractMould['tr_contract']) except: achievementDetailCount = sqlbase.get_count( "select * from contract_achievement_detail acd inner join apartment_contract_achievement aca " "on aca.achievement_id=acd.achieve_id and aca.contract_num='%s' where acd.deleted=0" % apartmentContractNum) if achievementDetailCount == 0: consoleLog(u'%s:出租合同 %s 删除后分成记录从预估业绩排行榜中删除' % (fileName, apartmentContractNum))
def test_1026(): """新签合同续签,委托周期不连续""" # describe:新签合同续签,委托周期不连续 # data:1、原合同状态为有效;2、续签合同委托起算日大于原合同委托到期日; # result:1、续签合同创建成功;2、原合同状态变为已续; fileName = 'houseContract_1026' contractSql = "select contract_num,apartment_type,entrust_type,reform_way,sign_body,payment_cycle,rental_price,year_service_fee,entrust_end_date,date_ADD(date(entrust_end_date), interval 1 MONTH)," \ "date_ADD(date(entrust_end_date), interval 2 YEAR),date_ADD(date(entrust_end_date), interval 2 MONTH),SYSDATE(),house_id,contract_id from house_contract where contract_type='NEWSIGN' " \ "and deleted=0 and city_code=330100 and is_active='Y'and contract_status='EFFECTIVE' and pay_object is not null order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return contractInfo = sqlbase.serach(contractSql) contractNum = contractInfo[0] consoleLog(u'%s:取委托合同 %s 做续签' % (fileName, contractNum)) housearea = sqlbase.serach( "select build_area from house h,house_contract hc where h.house_id=hc.house_id and hc.house_id='%s'" % contractInfo[13]) lordSql = "select * from house_contract_landlord hcl INNER JOIN house_contract hc on hc.contract_id = hcl.contract_id where hc.contract_id='%s'" % contractInfo[ 14] lordExist = True if sqlbase.get_count(lordSql) != 0 else False with Base() as base: base.open(page.entrustContractPage, houseContractPage.contractSearchMould['tr_contract']) base.input_text( houseContractPage.contractSearchMould['contract_num_loc'], contractNum) base.click( houseContractPage.contractSearchMould['search_button_loc']) # 搜索 base.staleness_of( houseContractPage.contractSearchMould['tr_contract']) # 等待列表刷新 base.click( houseContractPage.addHouseContractMould['continue_button']) # 续签 base.click( houseContractPage.addHouseContractMould['pledge_loc']) # 抵押情况 base.input_text( houseContractPage.addHouseContractMould['inside_space_loc'], housearea) # 面积 base.type_select(houseContractPage.typeMould['apartment_type'], contractInfo[1]) # 服务公寓 base.type_select(houseContractPage.typeMould['reform_way'], contractInfo[3]) # 不改造 base.type_select(houseContractPage.typeMould['entrust_type'], contractInfo[2]) # 整租 newContractNum = 'AutoTestHX' + '-' + time.strftime('%m%d%H%M%S') consoleLog(u'续签合同号为 %s' % newContractNum) # 定义合同编号 base.input_text( houseContractPage.addHouseContractMould['contract_num_loc'], newContractNum) # 输入合同编号 base.click(houseContractPage.addHouseContractMould['oldcontract_loc'] ) # 原合同不并入新合同 base.type_select(houseContractPage.typeMould['sign_body'], contractInfo[4]) # 杭州爱上租科技有限公司 base.type_date(houseContractPage.typeMould['sign_date'], contractInfo[8]) # 签约日期:原合同到期日期 base.type_date(houseContractPage.typeMould['owner_sign_date'], contractInfo[8]) # 业主交房日期:原合同到期日期 base.type_date(houseContractPage.typeMould['entrust_start_date'], contractInfo[9]) # 委托起算日:原合同到期后一月 base.type_date(houseContractPage.typeMould['entrust_end_date'], contractInfo[10]) # 委托到期日:原合同到期后二年 base.type_select(houseContractPage.typeMould['freeType'], 'STARTMONTH') # 免租:无 base.type_date(houseContractPage.typeMould['first_pay_date'], contractInfo[9]) # 首次付款日:原合同到期后一月 base.type_date(houseContractPage.typeMould['second_pay_date'], contractInfo[11]) # 第二次付款日:原合同到期后二个月 base.input_text(houseContractPage.addHouseContractMould['rent_loc'], contractInfo[6]) # 租金 base.input_text(houseContractPage.addHouseContractMould['parking_loc'], 100) # 停车费 base.input_text( houseContractPage.addHouseContractMould['service_fee_loc'], contractInfo[7]) # 服务费 base.click(houseContractPage. addHouseContractMould['payment_cycle_loc_1']) # 付款周期 base.click(houseContractPage. addHouseContractMould['payment_cycle_month_loc']) # 月付 base.click( houseContractPage.addHouseContractMould['next_loc_1']) # 下一页 base.click( houseContractPage.addHouseContractMould['next_loc_2']) # 下一页 if not lordExist: landlordName = 'AutoTest' base.click(houseContractPage. addHouseContractMould['addlandlord_button']) # 新增业主信息 base.input_text( houseContractPage.addHouseContractMould['landlord_name_loc'], landlordName) base.type_select(houseContractPage.typeMould['ownerCardType'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['landlord_card_loc'], '42062119910828541X') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage.addHouseContractMould['landlord_phone_loc'], '13666666666') base.click( houseContractPage.addHouseContractMould['landlord_name_loc']) base.input_text( houseContractPage. addHouseContractMould['landlord_address_loc'], u'浙江省杭州市滨江区海创基地南楼三层') base.input_text( houseContractPage.addHouseContractMould['emergency_name_loc'], u'紧急联系人') base.input_text( houseContractPage.addHouseContractMould['emergency_phone_loc'], '13777777777') base.type_select(houseContractPage.typeMould['emergency_card_type'], 'IDNO') # 身份证 base.input_text( houseContractPage.addHouseContractMould['emergency_id_card_loc'], '411722197508214014') base.input_text( houseContractPage.addHouseContractMould['emergency_address_loc'], u'浙江省杭州市滨江区海创基地北楼四层') base.click(houseContractPage.addHouseContractMould['next_loc_3']) base.click(houseContractPage.addHouseContractMould['submit_loc']) base.check_submit() # 原合同状态已续检查 contractSql = "select contract_status from house_contract where contract_num='%s' and deleted = 0" % contractNum base.diffAssert( lambda test: asserts(sqlbase.serach(contractSql)[0]).is_equal_to( 'CONTINUED'), 1026, u'%s:委托合同 %s 续签异常,期望值 CONTINUED 实际值 %s,执行SQL:%s' % (fileName, contractNum, sqlbase.serach(contractSql)[0], contractSql))
def test_1111(): """委托终止结算删除""" # describe:委托终止结算未审核的删除成功 # data:1、委托终止结算待审核 # result:1、删除成功 fileName = 'apartmentContract_1111' contractSql = "select contract_num,entrust_end_date,date(sysdate()) from house_contract where contract_id not in (select house_contract.contract_id from apartment ,apartment_contract ,house_contract " \ "where house_contract.contract_id=apartment.house_contract_id and apartment.house_id=apartment_contract.house_id and apartment_contract.real_due_date>NOW()) " \ "and city_code = 330100 and audit_status = 'APPROVED'and contract_status = 'EFFECTIVE' and deleted = 0 and entrust_end_date>NOW() order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return info = sqlbase.serach(contractSql) contractNum = info[0] consoleLog(u'%s:取合同 %s 终止结算做审核' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractEndPage.addContractEndMould['tr_contract']) base.input_text(houseContractEndPage.searchMould['contract_num_loc'], contractNum) # 输入合同号 base.click(houseContractEndPage. searchMould['contract_search_button_loc']) # 搜索 base.staleness_of( houseContractEndPage.addContractEndMould['tr_contract']) # 等待数据刷新 base.context_click( houseContractEndPage.addContractEndMould['tr_contract']) # 右击第一条数据 base.click(houseContractEndPage.addContractEndMould['end_button_loc'], index=1) # 终止结算 base.wait_element( houseContractEndPage.addContractEndMould['penalty_loc']) # 等待页面出现 base.type_select(houseContractEndPage.typeMould['end_type'], 'OWNER_DEFAULT') # 结算类型-业主违约 base.type_date(houseContractEndPage.typeMould['end_date'], contractSql[1]) # 终止日期:当天 endNum = 'AutoHCE' + '-' + time.strftime('%m%d%H%M') base.input_text( houseContractEndPage.addContractEndMould['end_num_loc'], endNum) # 结算扣款 base.input_text( houseContractEndPage.addContractEndMould['penalty_loc'], 2000) # 违约金陪入 base.input_text( houseContractEndPage.addContractEndMould['penalty_remark_loc'], u'违约金陪入') # 备注 base.input_text( houseContractEndPage.addContractEndMould['return_rent_loc'], 5000) # 返还房租 base.input_text( houseContractEndPage.addContractEndMould['return_rent_remark_loc'], u'返还房租') # 备注 base.type_date(houseContractEndPage.typeMould['receivable_date'], contractSql[2]) # 应收日期 # 打款信息 base.type_select(houseContractEndPage.typeMould['pay_type'], 'OWNER') # 打款类别-业主收款 base.input_text( houseContractEndPage.addContractEndMould['pay_name_loc'], 'AutoTest') # 姓名 base.type_select(houseContractEndPage.typeMould['pay_object_loc'], 'BUSINESS') # 公司 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_loc'], u'中国银行') # 收款银行 base.input_text( houseContractEndPage.addContractEndMould['pay_bank_no_loc'], '12345678910') # 银行卡号 base.upload_file( houseContractEndPage.addContractEndMould['add_end_image_loc'], 'C:\Users\Public\Pictures\Sample Pictures\jsp.jpg') # 传图 base.wait_element( houseContractEndPage.addContractEndMould['end_image_loc']) base.click( houseContractEndPage.addContractEndMould['submit_loc']) # 提交 base.check_submit() # 等待提交完成 # 终止结算新增检查 contractEndAdd = "select hce.end_id from house_contract hc,house_contract_end hce where hc.contract_id=hce.contract_id and hc.contract_num='%s' and hce.deleted=0 " \ "and hce.audit_status='NO_AUDIT' and hce.end_type='OWNER_DEFAULT'" % contractNum base.diffAssert( lambda test: asserts(sqlbase.waitData(contractEndAdd, 1)).is_true( ), 1111, u'%s:委托合同 %s 正退终止结算新增异常,执行SQL:%s' % (fileName, contractNum, contractEndAdd)) # 删除终止结算 base.open( page.contractEndPage, houseContractEndPage.searchMould['contract_search_button_loc']) base.click(houseContractEndPage.addContractEndMould['tab_info'], index=1) base.input_text( houseContractEndPage.searchMould['end_contract_num_loc'], contractNum) base.click(houseContractEndPage.searchMould['end_search_button_loc']) base.staleness_of(houseContractEndPage.searchMould['tr_contract_end']) base.click(houseContractEndPage.addContractEndMould['delete_button']) base.click( houseContractEndPage.addContractEndMould['delete_button_confirm']) base.check_submit() houseContractEndDelSql = "select * from house_contract_end where end_contract_num='%s' and deleted=0" % endNum base.diffAssert( lambda test: asserts(sqlbase.get_count(houseContractEndDelSql)). is_not_equal_to(1), 1111, u'%s:委托合同 %s 终止结算删除异常,执行SQL:%s' % (fileName, contractNum, houseContractEndDelSql))
def test_1030(): """租金明细未审核无法初审""" # describe:租金明细未审核无法初审 # data:1、合同状态为有效或者已续;2、合同审核状态为待审核;3、租金明细页面新增一条租金明细并保存; # result:1、审核失败,提示租金未审核 fileName = 'houseContract_1030' contractSql = "select hc.contract_num,sysdate(),h.house_code from house h INNER JOIN house_contract hc on hc.house_id=h.house_id where hc.audit_status='AUDIT' and hc.deleted=0 " \ "and hc.is_active='Y' and hc.city_code=330100 and sign_date>'2017-01-01' and EXISTS (select * from house_contract_payable hcp where hcp.contract_id=hc.contract_id " \ "and hcp.end_status='NOTPAY') order by rand() limit 1" if sqlbase.get_count(contractSql) == 0: consoleLog(u'%s:SQL查无数据!' % fileName, 'w') consoleLog(u'执行SQL:%s' % contractSql) return contractInfo = sqlbase.serach(contractSql) contractNum = contractInfo[0] houseCode = contractInfo[2] consoleLog(u'%s:取未审核委托合同 %s 做审核' % (fileName, contractNum)) with Base() as base: base.open(page.entrustContractPage, houseContractPage.contractSearchMould['tr_contract']) base.input_text( houseContractPage.contractSearchMould['contract_num_loc'], contractNum) base.input_text( houseContractPage.contractSearchMould['residential_name_loc'], houseCode) base.click( houseContractPage.contractSearchMould['search_button_loc']) # 搜索 base.staleness_of( houseContractPage.contractSearchMould['tr_contract']) # 等待列表刷新 base.dblclick(houseContractPage.contractSearchMould['tr_contract'], checkLoc=houseContractPage. addHouseContractMould['contract_num_loc']) # 双击第一条数据 # 审核租金 base.click(houseContractPage.addHouseContractMould['recreate_button'] ) # 重新生成租金明细 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=1) # 租金页面 time.sleep(3) base.click( houseContractPage.addHouseContractMould['rent_save_button']) # 保存 for i in range(3): try: base.check_submit() break except: message = base.script( "var a=$('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) messagehope = u'用户数据已经被其他用户更新' if messagehope in message: base.click( houseContractPage. addHouseContractMould['message_close_loc']) # 关闭提示 base.click(houseContractPage. addHouseContractMould['rent_save_button']) # 保存 base.check_submit() base.click(houseContractPage. addHouseContractMould['rent_detail_selectAll']) # 全选 base.click( houseContractPage.addHouseContractMould['rent_audit_loc']) # 审核 base.click( houseContractPage.addHouseContractMould['audit_pass_loc']) # 通过 time.sleep(3) base.click(houseContractPage. addHouseContractMould['rent_audit_confirm']) # 确认 base.check_submit() # 新增租金明细 base.click(houseContractPage.addHouseContractMould['add_detail_button'] ) # 新增租金明细 time.sleep(1) base.script( "$('.erp-table>tbody>tr:last input[type=\"checkbox\"]').click()" ) # 选择记录 base.type_select( houseContractPage.addHouseContractMould['money_type_loc'], 'PARKING') # 款项类型 base.type_date( houseContractPage.addHouseContractMould['rent_start_date_loc'], contractInfo[1]) # 开始时间 base.type_date( houseContractPage.addHouseContractMould['rent_end_date_loc'], contractInfo[1]) # 结束时间 base.type_date( houseContractPage.addHouseContractMould['payable_date_loc'], contractInfo[1]) # 应付时间 base.scrollTo( houseContractPage.addHouseContractMould['payable_amount_loc']) base.input_text( houseContractPage.addHouseContractMould['payable_amount_loc'], 100) # 应付金额 base.click( houseContractPage.addHouseContractMould['rent_save_button']) # 保存 base.check_submit() # 初审 base.click(houseContractPage.addHouseContractMould['tab_info_loc'], index=3) # 最后一页 time.sleep(3) base.script('$("button[status=\'PASS\']")[2].click()') # 初审 base.click(houseContractPage. addHouseContractMould['contract_audit_confirm']) # 确认 base.wait_element( houseContractPage.addHouseContractMould['message_loc']) # 等待提示出现 message = base.script( "var a = $('.panel.window.messager-window>div:nth-child(2)>div:nth-child(2)').text();return a", True) # 获取提示信息 messagehope = u'租金未审核.' base.diffAssert( lambda test: asserts(message).contains(messagehope), 1030, u'%s:租金未审核合同 %s 初审异常,期望信息"%s"实际信息"%s"' % (fileName, contractNum, messagehope, message))
def test_1045(): """修改出租合同租金""" # describe:在出租合同详情中,修改业绩核算周期对应时间段的出租合同租金策略中的租金,业绩发生变化 # data:1、业绩审核状态为待审核;2、委托合同状态为待审核或者已初审;3、提前记录原业绩中的核算出租价和差价业绩; # result:1、新产生的业绩中核算出租价与原记录不同;2、新的差价业绩与原来的值不同; fileName = 'apartmentAchievement_1045' with Base() as base: # 创建委托合同和出租合同 houseSql = sqlbase.serach( "select house_id,residential_id,building_id,house_code from house where deleted=0 and city_code=330100 order by rand() limit 1" ) # 获取随机开发房源 houseInfo = { 'houseID': houseSql[0], 'residentialID': houseSql[1], 'buildingID': houseSql[2], 'houseCode': houseSql[3] } dateInfo = sqlbase.serach( "select date(sysdate()),date_add(date(sysdate()),INTERVAL 1 day),date_add(date(sysdate()),interval 2 year),date_add(date(sysdate()),interval 27 month)," "date_add(date(sysdate()),INTERVAL 1 month),date_add(date(sysdate()),INTERVAL 6 month),date_add(date(sysdate()),INTERVAL 3 month) from dual" ) # 日期元素 apartmentId = addHouseContractAndFitment( apartment_type='MANAGE', entrust_type='SHARE', sign_date=dateInfo[0], owner_sign_date=dateInfo[0], entrust_start_date=dateInfo[0], entrust_end_date=dateInfo[2], delay_date=dateInfo[3], free_start_date=dateInfo[0], free_end_date=dateInfo[4], first_pay_date=dateInfo[0], second_pay_date=dateInfo[4], rent=3000, parking=100, year_service_fee=500, payment_cycle='MONTH', fitment_start_date=dateInfo[0], fitment_end_date=dateInfo[4], rooms=3, fitmentCost=88888, houseInfo=houseInfo) rentPriceInfo = sqlbase.serach( "select rent_price,date(sysdate()) from apartment where apartment_id='%s'" % apartmentId) rentPrice = float(rentPriceInfo[0]) customer = createCustomer() apartmentContractInfo = createApartmentContract( apartement_id=apartmentId, customerInfo=customer, rent_price=rentPrice, sign_date=dateInfo[0], rent_start_date=dateInfo[1], rent_end_date=dateInfo[5], # 承租6个月 deposit=rentPrice, payment_cycle='MONTH') apartmentContractNum = apartmentContractInfo['contractNum'] # 业绩检查 achievementsql = "select aca.is_active,aca.audit_status,aca.contract_audit_status,aca.profits_fee,aca.achievementRent from apartment_contract_achievement aca " \ "inner join apartment a on a.apartment_code=aca.house_code and a.apartment_id='%s' where aca.contract_num='%s' and aca.deleted=0" % ( apartmentId, apartmentContractNum) base.diffAssert( lambda test: asserts(sqlbase.waitData(achievementsql, 1)).is_true( ), 1057, u'%s:合同 %s 对应业绩生成异常' % (fileName, apartmentContractNum)) profits_feeOld = sqlbase.serach(achievementsql)[3] # 差价业绩 achievementRentOld = sqlbase.serach(achievementsql)[4] # 核算出租价 # 修改出租合同租金策略 base.open(page.apartmentContractPage, apartmentContractPage.searchContractMould['tr_contract']) base.input_text( apartmentContractPage.searchContractMould['contract_num_loc'], apartmentContractNum) # 输入合同编号 base.click( apartmentContractPage.searchContractMould['search_button_loc']) base.staleness_of( apartmentContractPage.searchContractMould['tr_contract']) base.dblclick(apartmentContractPage.searchContractMould['tr_contract'], checkLoc=apartmentContractPage. addApartmentContractMould['contract_num_loc']) # 双击第一条数据 # base.click(apartmentContractPage.addApartmentContractMould['rent_strategy1_end_loc']) base.script( "$('#contract_strategy_table > table > tbody > tr > td:nth-child(8) > input').click()" ) base.type_date( apartmentContractPage. addApartmentContractMould['rent_strategy1_end_loc'], dateInfo[6]) base.click(apartmentContractPage. addApartmentContractMould['rent_strategy_menu_loc']) base.input_text( apartmentContractPage. addApartmentContractMould['rent_strategy2_money_loc'], 3000) base.type_date( apartmentContractPage. addApartmentContractMould['rent_strategy2_end_loc'], dateInfo[5]) base.click( apartmentContractPage.addApartmentContractMould['save_button']) base.check_submit() # # 获取最新的核算收进价和差价业绩 time.sleep(10) achievementInfoNew = sqlbase.serach(achievementsql) profits_fee_new = achievementInfoNew[3] # 差价业绩 achievementRent_new = achievementInfoNew[4] # 核算出租价 base.diffAssert( lambda test: asserts(achievementRent_new).is_not_equal_to( achievementRentOld), 1045, u'%s:出租合同 %s 对应租金策略修改后业绩中核算出租业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, achievementRent_new, achievementRentOld)) base.diffAssert( lambda test: asserts(profits_fee_new).is_not_equal_to( profits_feeOld), 1045, u'%s:出租合同 %s 对应委托成本修改后业绩中差价业绩异常,修改前 %s 修改后 %s' % (fileName, apartmentContractNum, profits_feeOld, profits_fee_new))