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))
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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]))
Ejemplo n.º 8
0
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'续签后,原合同押金没有转入新合同中')
Ejemplo n.º 11
0
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))
Ejemplo n.º 12
0
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))
Ejemplo n.º 15
0
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))
Ejemplo n.º 17
0
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))
Ejemplo n.º 20
0
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))
Ejemplo n.º 21
0
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))
Ejemplo n.º 22
0
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))
Ejemplo n.º 23
0
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))
Ejemplo n.º 25
0
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))
Ejemplo n.º 27
0
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))