Example #1
0
def test():
    apartmentId = 'HZGS1607300454'
    customer = createCustomer()  # 创建租客,出租合同
    contract_num_sign = u'WFL'  # 合同标识
    contract_num = '%s%s-%s' % (contract_num_sign, time.strftime('%m%d%H%M'),
                                get_randomString(2))
    # contract_num = 'WFL08280959-1r'
    sign_date = addDays(5, addMonths(-11, today()))
    sign_date = today()
    rent_price = 2030
    rent_start_date = addDays(1, sign_date)
    rent_end_date = addDays(-1, addMonths(12, rent_start_date))
    payment_cycle = 'HALF_YEAR'
    sign_phone = '18815286582'
    sign_name = '王方龙'
    sign_id_type = 'IDNO'
    sign_id_no = '330381199203025315'
    # sign_id_no = '111111111111111111'
    contract = Apartment(apartmentId).createApartmentContract(
        customerInfo=customer,
        rent_price=rent_price,
        sign_date=sign_date,
        rent_start_date=rent_start_date,
        rent_end_date=rent_end_date,
        payment_cycle=payment_cycle,
        contract_num=contract_num,
        sign_phone=sign_phone,
        sign_id_no=sign_id_no,
        sign_name=sign_name,
        sign_id_type=sign_id_type)
    print(contract.apartment_contract_id)
Example #2
0
def createHouseContract(houseInfo):
    """新签委托合同"""
    house = House(houseInfo[0])
    consoleLog('签约房源:%s, %s, %s' % (house.house_id, house.house_code, house.property_name))
    # 委托合同参数
    contract_num_sign = u'WFL-2.0'  # 合同标识
    apartment_type = 'BRAND'
    entrust_type = 'ENTIRE'
    contract_num = '%s%s%s%s-%s' % (contract_num_sign, apartment_type[0], entrust_type[0], time.strftime('%m%d%H%M'), get_randomString(2))
    sign_date = addMonths(-2, today())
    # sign_date = addDays(-20, today())
    owner_sign_date = addDays(1, sign_date)
    fitment_start_date = addDays(3, sign_date)
    fitment_end_date = addMonths(1, sign_date)
    entrust_start_date = addDays(1, fitment_end_date)
    entrust_year = 3
    rent = 1234.34
    parking = 123
    # try:
    contract = house.createHouseContract(contract_num=contract_num, apartment_type=apartment_type,
                                         entrust_type=entrust_type, sign_date=sign_date,
                                         owner_sign_date=owner_sign_date, fitment_start_date=fitment_start_date, fitment_end_date=fitment_end_date,
                                         entrust_start_date=entrust_start_date, entrust_year=entrust_year, rent=rent,
                                         parking=parking)
    # contract.audit('fushen')
    decoration = Decoration(contract.house_contract_id)
Example #3
0
    def resign(
        self,
        contract_num=None,
        sign_date=None,
        rent_end_date=None,
        money_cycle=None,
        payment_date=None,
    ):
        """续签"""

        # self.receiptAndAudit()
        contract_num = 'RS-%s' % self.apartment_contract_num if not contract_num else contract_num
        sign_date = today() if not sign_date else sign_date
        rent_start_date = addDays(1, self.rent_end_date)
        rent_end_date = addMonths(
            12, self.rent_end_date) if not rent_end_date else rent_end_date
        start_date = rent_start_date
        end_date = rent_end_date
        money = self.rental_price if not self.rental_price == 'None' else 2030
        deposit = self.deposit
        month_server_fee = self.month_server_fee
        payment_date = rent_start_date if not payment_date else payment_date
        money_cycle = self.payment_cycle if not money_cycle else money_cycle
        data = {
            "apartmentContractRentInfoList": [{
                "firstRow":
                True,
                "money":
                money,
                "start_date":
                start_date,
                "rowIndex":
                0,
                "end_date":
                end_date,
                "money_cycle":
                money_cycle,
                "payment_date":
                payment_date,
                "deposit":
                deposit,
                "agencyFeeMoney":
                "0.00",
                "money_type":
                "RENT",
                "rent_start_date":
                rent_start_date,
                "rent_end_date":
                rent_end_date,
                "sign_date":
                sign_date,
                "month_server_fee":
                month_server_fee
            }],
            "apartment_id":
            self.apartment_id,
            "apartment_rent_price":
            money,
            "sign_date":
            sign_date,
            "rent_end_date":
            rent_end_date,
            "payment_date":
            payment_date,
            "deposit_type":
            "ONE",
            "payment_type":
            "NORMAL",
            "payment_cycle":
            money_cycle,
            "cash_rent":
            str(float(money) * 0.1),
            "deposit":
            deposit,
            "agency_fee":
            "0.00",
            "month_server_fee":
            month_server_fee,
            "month_server_fee_discount":
            "100%",
            "dispostIn":
            1,
            "contract_num":
            contract_num,
            "person": {},
            "model":
            "4"
        }
        url = 'isz_contract/ApartmentContractController/searchApartmentContractDetail.action'
        requestPayload = {
            "parent_id": self.apartment_contract_id,
            "contract_type": "RENEWSIGN"
        }
        result = myRequest(url, requestPayload)
        if result:
            apartmentContract = delNull(result['obj']['apartmentContract'])
            for x, y in apartmentContract.items():
                data[x] = y

            customerPerson = delNull(result['obj']['customerPerson'])
            for x, y in customerPerson.items():
                data['person'][x] = y

        data['receivables'] = self.createReceivables(
            data['apartmentContractRentInfoList'])

        hosueInfo = {
            "rent_start_date": rent_start_date,
            "rent_end_date": rent_end_date,
            "houseId": self.house_id,
            "apartment_id": self.apartment_id,
            "room_id": self.room_id
        }
        data['houseContractList'] = self.gethouseContractList(
            self.entrust_type, hosueInfo)
        contract_id = self.createApartmentContract(data)
        return ApartmentContract(contract_id)
Example #4
0
File: house.py Project: bestwfl/isz
    def createHouseContract(self,
                            contract_num,
                            apartment_type,
                            entrust_type,
                            sign_date,
                            owner_sign_date,
                            entrust_start_date,
                            entrust_year,
                            rent,
                            parking=None,
                            payment_cycle='HALF_YEAR',
                            fitment_start_date=None,
                            fitment_end_date=None,
                            contract_type='NEWSIGN'):
        """
        新增委托合同以及分割交房之后同时定价
        :param entrust_year:
        :param contract_num:
        :param apartment_type: 公寓类型
        :param entrust_type: 合同类型
        :param sign_date: 签约日期
        :param owner_sign_date: 业主交房日
        :param entrust_start_date: 委托起算日
        :param rent: 房租
        :param parking:车位费
        :param payment_cycle:付款类型
        :param fitment_start_date:装修起算日,默认无
        :param fitment_end_date:装修结束日,默认无
        :param contract_type:合同类型,默认新签
        :return:合租返回其中一条公寓ID,整租直接返回公寓ID
        """

        contractbase = ContractBase()
        fileType = contractbase.FileType()
        signUser = getUserInfo()
        signUser = {
            'sign_user_name': signUser['user_name'],
            'sign_uid': signUser['uid'],
            'sign_dep_name': signUser['dep_name'],
            'sign_did': signUser['did']
        }
        landlordInfo = landlord
        sign_date = sign_date
        owner_sign_date = owner_sign_date
        entrust_start_date = entrust_start_date
        entrust_year_after = addDays(
            -1, addMonths(12 * entrust_year, entrust_start_date))
        entrust_end_date = addDays(free_date_par[payment_cycle] * entrust_year,
                                   entrust_year_after)
        delay_date = entrust_end_date
        # 免租期 (默认首月)
        # free_start_date = entrust_start_date if freeType == 'STARTMONTH' else free_start_date
        # free_end_date = addDays(-1, addMonths(1, entrust_start_date)) if freeType == 'STARTMONTH' else free_end_date
        # 付款日 默认委托下个月30号为第一次,
        first_pay_date = addMonthExDay(30, months=0, date=entrust_start_date)
        second_pay_date = addMonthExDay(30, months=2, date=entrust_start_date)
        # 装修期 品牌默认签约前一个月 托管默认无
        fitment_start_date = addMonths(
            -1, entrust_start_date
        ) if fitment_start_date is None else fitment_start_date
        fitment_end_date = addDays(
            -1, entrust_start_date
        ) if fitment_end_date is None else fitment_end_date

        # 图片上传
        idCardPhotos = upLoadPhoto(url=self.uploadPhotoURL,
                                   filename='idCardPhotos.png',
                                   filepath=r"C:\Users\user\Desktop\Image\\")
        CERTIFICATE_1 = upLoadPhoto(
            url=self.uploadPhotoURL,
            filename='CERTIFICATE_1.png',
            filepath=r"C:\Users\user\Desktop\Image\\")  # 带证号页(产权证编号)
        CERTIFICATE_2 = upLoadPhoto(
            url=self.uploadPhotoURL,
            filename='CERTIFICATE_2.png',
            filepath=r"C:\Users\user\Desktop\Image\\")  # 主页(业主姓名/物业地址)
        CERTIFICATE_3 = upLoadPhoto(
            url=self.uploadPhotoURL,
            filename='CERTIFICATE_3.png',
            filepath=r"C:\Users\user\Desktop\Image\\")  # 附记页
        FENHUTU = upLoadPhoto(url=self.uploadPhotoURL,
                              filename='FENHUTU.png',
                              filepath=r"C:\Users\user\Desktop\Image\\")  # 分户图
        YUANHUXINGTU = upLoadPhoto(
            url=self.uploadPhotoURL,
            filename='YUANHUXINGTU.png',
            filepath=r"C:\Users\user\Desktop\Image\\")  # 原户型图
        OTHER = upLoadPhoto(url=self.uploadPhotoURL,
                            filename='OTHER.png',
                            filepath=r"C:\Users\user\Desktop\Image\\")  # 其他
        ATTACHMENTS = upLoadPhoto(
            url=self.uploadPhotoURL,
            filename='ATTACHMENTS.png',
            filepath=r"C:\Users\user\Desktop\Image\\")  # 合同附件

        houseContractFirst = {
            'address':
            self.property_name,
            'certificate_type':
            '',
            'certificate_type_id':
            '2',  # 产权证类型 (默认房屋所有权)
            'commonLandlords': [],
            'common_case':
            'PRIVATE',  # 共有情况 (默认私有)
            'common_case_cn':
            '',
            "bathrooms":
            2,
            "kitchens":
            1,
            "livings":
            1,
            "rooms":
            3,
            'contract_id':
            None,
            'contract_type':
            contract_type,
            'contract_type_cn':
            u'新签' if contract_type == 'NEWSIGN' else u'续签',
            'houseContractLandlord': {
                'card_type':
                landlordInfo['card_type'],  # 产权人证件类型 (默认护照)
                'id_card':
                landlordInfo['id_card'],  # 证件号 (默认)
                'landlord_name':
                landlordInfo['landlord_name'],  # 产权人姓名 (默认)
                'property_owner_type':
                'PROPERTYOWNER',  # 产权人类型 (默认个人)
                'property_card_id':
                'chanquanzheng',  # 产权证号 (默认)
                'idCardPhotos': [{
                    'src': idCardPhotos.src,  # 默认
                    'url': idCardPhotos.url,  # 默认
                    'remark': '',
                    'img_id': idCardPhotos.id  # 默认
                }]  # 证件照片
            },  # 产权人信息
            'house_code':
            self.house_code,  # 房源code
            # 'inside_space': int(self.build_area) if self.build_area else 120.00,  # 使用面积 默认收房面积
            'inside_space':
            120.00,  # 使用面积 默认收房面积
            'is_new_data':
            None,
            'mortgageeStatementOriginal': [],
            'pledge':
            '0',
            'productionVos': [{
                "attachments": [{
                    "src": CERTIFICATE_2.src,
                    "url": CERTIFICATE_2.url,
                    "remark": "",
                    "img_id": CERTIFICATE_2.id
                }],
                "file_type":
                "主页(业主姓名/物业地址)",
                "file_type_id":
                fileType.getFileIdByTpye("主页(有业主姓名/物业地址页)"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "Y",
                "is_save_need":
                "Y"
            }, {
                "attachments": [{
                    "src": CERTIFICATE_1.src,
                    "url": CERTIFICATE_1.url,
                    "remark": "",
                    "img_id": CERTIFICATE_1.id
                }],
                "file_type":
                "带证号页(产权证编号)",
                "file_type_id":
                fileType.getFileIdByTpye("带证号页(有产权证编号页)"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "N",
                "is_save_need":
                "Y"
            }, {
                "attachments": [{
                    "src": CERTIFICATE_3.src,
                    "url": CERTIFICATE_3.url,
                    "remark": "",
                    "img_id": CERTIFICATE_3.id,
                }],
                "file_type":
                "附记页",
                "file_type_id":
                fileType.getFileIdByTpye("附记页"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "N",
                "is_save_need":
                "Y"
            }, {
                "attachments": [{
                    "src": FENHUTU.src,
                    "url": FENHUTU.url,
                    "remark": "",
                    "img_id": FENHUTU.id
                }],
                "file_type":
                "分户图",
                "file_type_id":
                fileType.getFileIdByTpye("分户图"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "N",
                "is_save_need":
                "N"
            }, {
                "attachments": [{
                    "src": YUANHUXINGTU.src,
                    "url": YUANHUXINGTU.url,
                    "remark": "",
                    "img_id": YUANHUXINGTU.id
                }],
                "file_type":
                "原户型图",
                "file_type_id":
                fileType.getFileIdByTpye("原户型图"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "N",
                "is_save_need":
                "N"
            }, {
                "attachments": [{
                    "src": OTHER.src,
                    "url": OTHER.url,
                    "remark": "",
                    "img_id": OTHER.id
                }],
                "file_type":
                "其他",
                "file_type_id":
                fileType.getFileIdByTpye("其他"),
                "is_active":
                "Y",
                "is_approved_need":
                "N",
                "is_audit_need":
                "N",
                "is_save_need":
                "N"
            }],  # 产证资料 (默认产权类型为房屋所有权格式)
            'production_address':
            self.property_name,  # 产权地址
            'property_card_id':
            None,
            'property_use':
            'HOUSE',  # 物业用途 (默认住宅)
            'property_use_cn':
            ''
        }  # 房源信息(选择不同的产权类型可以获取不同格式的产证资料)

        houseContractSecond = {
            'agreedRentOriginalStatements': [],
            'any_agent':
            '0',  # 有无代理人 (默认无代理人)
            'assetsOfLessor': [{
                'landlord_name':
                landlordInfo['landlord_name'],
                'phone':
                landlordInfo['phone'],
                'email':
                landlordInfo['email'],
                'mailing_address':
                landlordInfo['mailing_address']
            }],  # 资产出租人
            'contract_id':
            None,
            'houseContractSign': {
                'address': '',
                'agent_type': '',
                'attachments': [],
                'card_type': '',
                'email': '',
                'id_card': '',
                'phone': '',
                'sign_name': ''
            },
            'is_new_data':
            None,
            'originalAgentDataRelations': [],
            'originalLessorHasDied': []
        }  # 出租人

        houseContractThird = {
            'account_bank':
            u'海创支行',  # 收款行支行(默认)
            'account_name':
            landlordInfo['landlord_name'],  # 收款人姓名
            'account_num':
            '6123465789132',  # 收款账号 (默认)
            'bank':
            u'未知发卡银行',  # 收款银行 (默认)
            'contract_id':
            None,
            'is_new_data':
            None,
            'notPropertyOwnerGrantReceipts': [],
            'pay_object':
            'PERSONAL',  # 收款账号类型 (默认个人)
            'payeeIdPhotos': [{
                'src': idCardPhotos.src,  # 默认
                'url': idCardPhotos.url,  # 默认
                'remark': '',
                'img_id': idCardPhotos.id  # 默认
            }],  # 证件照片
            "receiptAccountProve": [{
                "src": idCardPhotos.src,
                "url": idCardPhotos.url,
                "type": "",
                "img_id": idCardPhotos.id
            }],
            'payee_card_type':
            landlordInfo['card_type'],  # 证件类型
            'payee_card_type_cn':
            '',
            'payee_emergency_name':
            u'紧急',  # 紧急人姓名(默认)
            'payee_emergency_phone':
            '13600000000',  # 紧急人手机号码(默认)
            'payee_id_card':
            landlordInfo['id_card'],  # 证件号
            'payee_type':
            'PROPERTYOWNER',  # 收款人类型 (默认产权人)
            'payee_type_cn':
            ''
        }  # 收款人&紧急联系人

        rentStrategysData = {
            "apartment_type": apartment_type,
            "contract_type": "NEWSIGN",
            "entrust_start_date": entrust_start_date,
            "entrust_end_date": entrust_end_date,
            "free_end_date": "",
            "free_start_date": "",
            "parking": "",
            "payment_cycle": payment_cycle,
            "rent_money": str(rent),
            "sign_date": sign_date,
            "city_code": self.city_code,
            "entrust_year": entrust_year,
            "free_days": free_date_par[payment_cycle],
            "version": "V_THREE"
        }  # 传到合同信息中

        rentStrategys = contractbase.getRentStrategys(
            rentStrategysData)  # 租金策略

        houseContractFour = {
            'apartment_type':
            apartment_type,  # 公寓类型
            'apartment_type_cn':
            '',
            'area_code':
            self.area_code,  # 城区
            'audit_status':
            None,
            'audit_time':
            None,
            'audit_uid':
            None,
            'building_id':
            self.building_id,
            'city_code':
            self.city_code,  # 城市
            'contractAttachments': [{
                "src": ATTACHMENTS.src,
                "url": ATTACHMENTS.url,
                "img_id": ATTACHMENTS.id
            }],
            'contract_id':
            None,
            'contract_num':
            contract_num,
            'contract_status':
            None,
            'contract_type':
            contract_type,
            'contract_type_cn':
            u'新签' if contract_type == 'NEWSIGN' else u'续签',
            'delay_date':
            delay_date,  # 延长到期日
            "free_days":
            free_date_par[payment_cycle],
            'electron_file_src':
            None,
            'energy_company':
            None,
            "entrust_year":
            entrust_year,
            "entrust_year_cn":
            "",
            'energy_fee':
            None,
            'entrust_end_date':
            entrust_end_date,  # 委托到期日
            'entrust_start_date':
            entrust_start_date,  # 委托开始日期
            'entrust_type':
            entrust_type,  # 合同类型
            'entrust_type_cn':
            '',
            'first_pay_date':
            first_pay_date,  # 首次付款日
            'fitment_end_date':
            fitment_end_date,  # 装修到期日
            'fitment_start_date':
            fitment_start_date,  # 装修起算日
            'freeType_cn':
            '',
            'have_parking':
            'Y',  # 是否有停车位 (默认有)
            'house_id':
            self.house_id,
            'housekeep_mange_dep':
            None,
            'housekeep_mange_dep_user':
            '******',
            'housekeep_mange_did':
            None,
            'housekeep_mange_uid':
            None,
            'housekeep_mange_user_name':
            None,
            'is_electron':
            None,
            'is_new_data':
            None,
            'owner_sign_date':
            owner_sign_date,  # 签约日期
            'parent_id':
            None,
            'parking':
            str(parking),  # 车位费(默认)
            'payment_cycle':
            payment_cycle,  # 付款方式
            'payment_cycle_cn':
            '',
            'property':
            None,
            'property_company':
            None,
            'reform_way':
            'RETROFITTING'
            if apartment_type is 'BRAND' else 'TINYCHANGE',  # RETROFITTING小改
            # 'reform_way': 'UNRRESTYLE',  # 改造方式RESTYLED
            'reform_way_cn':
            '',
            'remark':
            None,
            'rentMoney':
            str(rent),  # 租金
            'rentStrategys':
            rentStrategys,
            'rental_price':
            str(float(rent) + float(parking)),  # 总租金
            'reset_finance':
            'false',
            'residential_id':
            self.residential_id,
            'second_pay_date':
            second_pay_date,  # 第二次付款日
            'server_manage_dep_user':
            '',
            'server_manage_did':
            None,
            'server_manage_did_name':
            None,
            'server_manage_uid':
            None,
            'server_manage_uid_name':
            None,
            'service_fee_factor':
            0.01,  # 年服务费 (默认)
            'sign_body':
            'ISZPRO',  # 签约公司 (默认)
            'sign_date':
            sign_date,
            'sign_dep_name':
            signUser['sign_dep_name'],  # 签约部门
            'sign_did':
            signUser['sign_did'],
            'sign_uid':
            signUser['sign_uid'],
            'sign_user_name':
            signUser['sign_user_name'],  # 签约人
            'year_service_fee':
            None
        }  # 合同信息

        contractPayableData = {
            'contractId': None,
            'firstPayDate': first_pay_date,
            'secondPayDate': second_pay_date,
            'rentInfoList': rentStrategys,
            'version': 'V_THREE'
        }

        houseContractFive = contractbase.createContractPayable(
            contractPayableData)  # 服务费&应付

        houseContract = {
            'houseContractFrist': houseContractFirst,
            'houseContractSecond': houseContractSecond,
            'houseContractThird': houseContractThird,
            'houseContractFour': houseContractFour,
            'houseContractFive': houseContractFive
        }
        result = contractbase.saveHouseContract(houseContract)
        if result:
            # houseContractInfo = sqlbase.serach(
            #     "select contract_id,contract_num,house_id from house_contract where house_id = '%s' and deleted = 0 order by create_time desc limit 1" %
            #     self.house_id)
            sql = "select contract_id,contract_num,house_id from house_contract where house_id = '%s' and deleted = 0 order by create_time desc limit 1" % self.house_id
            houseContractInfo = Mysql().getAll(sql)[0]
            consoleLog('新签委托合同成功!')
            consoleLog('合同编号 : %s 合同ID : %s' %
                       (houseContractInfo[1], houseContractInfo[0]))
            return HouseContract(houseContractInfo[0])
Example #5
0
    def resign(self, contract_num, apartment_type=None, entrust_type=None, sign_date=today(), owner_sign_date=today(),
               entrust_start_date=None, entrust_year=None, payment_cycle=None, fitment_start_date=None,
               fitment_end_date=None,
               rent_money=None):
        """续签"""

        def getcontractInfo():
            """获取合同续签信息"""
            url = "http://erp.ishangzu.com/isz_housecontract/houseContractController/searchHouseContractInfoBase?contract_type=RENEWSIGN&house_id=%s&parent_id=%s" % (
                self.house_id, self.house_contract_id)
            return myRequest(url, method='get')['obj']

        # 基础字段
        contract_type = 'RENEWSIGN'
        apartment_type = apartment_type if apartment_type else self.apartment_type  # 默认原合同的公寓类型
        entrust_type = entrust_type if entrust_type else self.entrust_type  # 默认原合同的出租方式
        # 品牌公寓的装修开始和结束都默认在原合同之后一天,服务公寓没有装修期
        # if apartment_type == 'BRAND':
        #     fitment_start_date = fitment_start_date if fitment_start_date else addDays(1, self.entrust_end_date)
        #     fitment_end_date = fitment_end_date if fitment_end_date else fitment_start_date
        # else:
        fitment_start_date = None
        fitment_end_date = None
        #  续签默认没有装修期
        entrust_start_date = entrust_start_date if entrust_start_date else (
            addDays(1, fitment_end_date) if fitment_end_date else addDays(1,
                                                                          self.entrust_end_date))  # 续签开始日期默认为装修期结束日后一天,没有装修期的话就是原合同到期日的后一天
        entrust_year = entrust_year if entrust_year else (
            self.entrust_year if self.entrust_year else 3)  # 委托年限默认原合同年限,原合同没有的话3年
        sign_date = addDays(-1, entrust_start_date)
        owner_sign_date = sign_date
        payment_cycle = payment_cycle if payment_cycle else self.payment_cycle  # 付款周期默认与原合同相同
        entrust_year_after = addDays(-1, addMonths(12 * int(entrust_year), entrust_start_date))
        entrust_end_date = addDays(free_date_par[payment_cycle] * int(entrust_year), entrust_year_after)  # 委托到期日
        rent_money = rent_money if rent_money else self.rental_price  # 委托金额默认与原合同相同
        first_pay_date = addMonthExDay(30, months=0, date=entrust_start_date)  # 付款日 默认委托下个月30号为第一次
        second_pay_date = addMonthExDay(30, months=2, date=entrust_start_date)  # 目前不影响第二次应付的时间,实际为第一次付款日加付款周期后的时间
        contractInfo = getcontractInfo()
        landlordInfo = self.landlord()
        contractPhotos = self.contractPhotos()
        houseContractFirst = contractInfo['houseContractFrist']  # 房源信息
        houseContractSecond = {
            'agreedRentOriginalStatements': [],
            'any_agent': '0',  # 有无代理人 (默认无代理人)
            'assetsOfLessor': [{
                'landlord_name': landlordInfo.landlord_name,
                'phone': landlordInfo.phone,
                'email': landlordInfo.email,
                'mailing_address': landlordInfo.mailing_address
            }],  # 资产出租人
            'contract_id': None,
            'houseContractSign': {
                'address': '',
                'agent_type': '',
                'attachments': [],
                'card_type': '',
                'email': '',
                'id_card': '',
                'phone': '',
                'sign_name': ''
            },
            'is_new_data': None,
            'originalAgentDataRelations': [],
            'originalLessorHasDied': []
        }  # 出租人
        houseContractThird = {
            'account_bank': self.account_bank,  # 收款行支行(默认)
            'account_name': self.account_name,  # 收款人姓名
            'account_num': self.account_num,  # 收款账号 (默认)
            'bank': self.bank,  # 收款银行 (默认)
            'contract_id': None,
            'is_new_data': None,
            'notPropertyOwnerGrantReceipts': [],
            'pay_object': self.pay_object,  # 收款账号类型 (默认个人)
            'payeeIdPhotos': [{
                'src': 'http://img.ishangzu.com/' + str(contractPhotos['payeeIdPhotos']['src']),  # 默认
                'url': 'http://img.ishangzu.com/' + str(contractPhotos['payeeIdPhotos']['src']),  # 默认
                'remark': '',
                'img_id': contractPhotos['payeeIdPhotos']['img_id']  # 默认
            }],  # 证件照片
            'payee_card_type': self.payee_card_type,  # 证件类型
            'payee_card_type_cn': '',
            'payee_emergency_name': landlordInfo.emergency_name,  # 紧急人姓名(默认)
            'payee_emergency_phone': landlordInfo.emergency_phone,  # 紧急人手机号码(默认)
            'payee_id_card': self.payee_id_card,  # 证件号
            'payee_type': self.payee_type,  # 收款人类型 (默认产权人)
            'payee_type_cn': ''
        }  # 收款人&紧急联系人
        rentStrategysData = {
            "apartment_type": apartment_type,
            "contract_type": contract_type,
            "entrust_start_date": entrust_start_date,
            "entrust_end_date": entrust_end_date,
            "free_end_date": "",
            "free_start_date": "",
            "parking": "",
            "payment_cycle": payment_cycle,
            "rent_money": str(rent_money),
            "sign_date": sign_date,
            "city_code": self.city_code,
            "entrust_year": entrust_year,
            "free_days": free_date_par[payment_cycle],
            "version": "V_TWO"}  # 传到合同信息中
        rentStrategys = self.getRentStrategys(rentStrategysData)  # 租金策略
        houseContractFour = {
            'apartment_type': apartment_type,  # 公寓类型
            'apartment_type_cn': '',
            'area_code': self.area_code,  # 城区
            'audit_status': None,
            'audit_time': None,
            'audit_uid': None,
            'building_id': self.building_id,
            'city_code': self.city_code,  # 城市
            'contractAttachments': [{
                "src": 'http://img.ishangzu.com/' + str(contractPhotos['contractAttachments']['src']),
                "url": 'http://img.ishangzu.com/' + str(contractPhotos['contractAttachments']['src']),
                "img_id": contractPhotos['contractAttachments']['img_id']
            }],
            'contract_id': None,
            'contract_num': contract_num,
            'contract_status': None,
            'contract_type': contract_type,
            'contract_type_cn': u'新签' if contract_type == 'NEWSIGN' else u'续签',
            'delay_date': None,  # 延长到期日
            "free_days": free_date_par[payment_cycle],
            'electron_file_src': None,
            'energy_company': None,
            "entrust_year": entrust_year,
            "entrust_year_cn": "",
            'energy_fee': None,
            'entrust_end_date': entrust_end_date,  # 委托到期日
            'entrust_start_date': entrust_start_date,  # 委托开始日期
            'entrust_type': entrust_type,  # 合同类型
            'entrust_type_cn': '',
            'first_pay_date': first_pay_date,  # 首次付款日
            'fitment_end_date': fitment_end_date,  # 装修到期日
            'fitment_start_date': fitment_start_date,  # 装修起算日
            'freeType_cn': '',
            'have_parking': 'Y',  # 是否有停车位 (默认有)
            'house_id': self.house_id,
            'housekeep_mange_dep': None,
            'housekeep_mange_dep_user': '******',
            'housekeep_mange_did': None,
            'housekeep_mange_uid': None,
            'housekeep_mange_user_name': None,
            'is_electron': None,
            'is_new_data': None,
            'owner_sign_date': owner_sign_date,  # 签约日期
            'parent_id': self.house_contract_id,
            'parking': "",  # 车位费(默认)
            'payment_cycle': payment_cycle,  # 付款方式
            'payment_cycle_cn': '',
            'property': None,
            'property_company': None,
            'reform_way': 'OLDRESTYLE' if apartment_type == 'BRAND' else 'UNRRESTYLE',  # 改造方式
            'reform_way_cn': '',
            'remark': None,
            'rentMoney': str(rent_money),  # 租金
            'rentStrategys': rentStrategys,
            'rental_price': str(float(rent_money)),  # 总租金
            'reset_finance': 'false',
            'residential_id': self.residential_id,
            'second_pay_date': second_pay_date,  # 第二次付款日
            'server_manage_dep_user': '',
            'server_manage_did': None,
            'server_manage_did_name': None,
            'server_manage_uid': None,
            'server_manage_uid_name': None,
            'service_fee_factor': 0.01,  # 年服务费 (默认)
            'sign_body': 'ISZPRO',  # 签约公司 (默认)
            'sign_date': sign_date,
            'sign_dep_name': userInfo['dep_name'],  # 签约部门
            'sign_did': userInfo['did'],
            'sign_uid': userInfo['uid'],
            'sign_user_name': userInfo['user_name'],  # 签约人
            'year_service_fee': None
        }  # 合同信息
        rentStrategysData = {
            "apartment_type": apartment_type,
            "contract_type": contract_type,
            "entrust_start_date": entrust_start_date,
            "entrust_end_date": entrust_end_date,
            "free_end_date": None,
            "free_start_date": None,
            "parking": None,
            "payment_cycle": payment_cycle,
            "rent_money": rent_money,
            "property": None,
            "energy_fee": None,
            "sign_date": sign_date,
            "city_code": self.city_code,
            "entrust_year": entrust_year,
            "free_days": free_date_par[payment_cycle],
            "version": "V_TWO"
        }
        rentStrategys = self.getRentStrategys(rentStrategysData)
        contractPayableData = {
            'contractId': None,
            'firstPayDate': first_pay_date,
            'secondPayDate': second_pay_date,
            'rentInfoList': rentStrategys,
            'version': 'V_TWO'
        }
        houseContractFive = self.createContractPayable(contractPayableData)
        houseContract = {
            'houseContractFrist': houseContractFirst,
            'houseContractSecond': houseContractSecond,
            'houseContractThird': houseContractThird,
            'houseContractFour': houseContractFour,
            'houseContractFive': houseContractFive
        }
        result = self.saveHouseContract(houseContract)
        if result:
            houseContractInfo = sqlbase.serach(
                "select contract_id from house_contract where house_id = '%s' and deleted = 0 and contract_type='RENEWSIGN' and contract_num='%s' order by create_time desc limit 1" %
                (self.house_id, contract_num))
            consoleLog('委托续签合同成功!')
            consoleLog('合同编号 : %s 合同ID : %s' % (contract_num, str(houseContractInfo[0])))
            return houseContractInfo[0]
def test_1070():
    """检测出租合同正常续签"""
    with Base() as base:
        apartment = interface.addHouseContractAndFitment(
            apartment_type='MANAGE',
            entrust_type='ENTIRE',
            sign_date=today(),
            owner_sign_date=today(),
            entrust_start_date=today(),
            entrust_end_date=addMonths(24),
            delay_date=addMonths(27),
            free_start_date=today(),
            free_end_date=addMonths(1),
            first_pay_date=today(),
            second_pay_date=addMonths(1),
            rent=2800,
            parking=120,
            year_service_fee=180,
            payment_cycle='MONTH')
        customer = interface.createCustomer()
        contractInfo = interface.createApartmentContract(
            apartement_id=apartment,
            customerInfo=customer,
            rent_price=5500,
            sign_date=today(),
            rent_start_date=today(),
            rent_end_date=addMonths(12),
            deposit=2500,
            payment_cycle='MONTH')
        base.open(
            page.apartmentContractPage,
            apartmentContractPage.searchContractMould['contract_num_loc'])
        base.click(
            apartmentContractPage.searchContractMould['entire_tab_button'])
        base.input_text(
            apartmentContractPage.searchContractMould['contract_num_loc'],
            contractInfo['contractNum'],
            index=1)
        base.click(apartmentContractPage.
                   searchContractMould['entire_search_button_loc'])
        base.staleness_of(
            apartmentContractPage.searchContractMould['entire_tr_contract'])
        interface.receipt('apartmentContract', contractInfo['contractID'])
        base.click(apartmentContractPage.searchContractMould['resign_loc'],
                   index=1)
        base.click(
            apartmentContractPage.addApartmentContractMould['deposit_manage'],
            index=0)
        contractNum = contractInfo['contractNum'] + 'xu'
        base.input_text(
            apartmentContractPage.
            addApartmentContractMould['contract_num_loc'], contractNum)
        base.type_date(apartmentContractPage.typeMould['sign_date'], today())
        base.type_date(apartmentContractPage.typeMould['rent_end_date2'],
                       addDays(-1, addMonths(24)))
        base.input_text(
            apartmentContractPage.addApartmentContractMould['deposit_loc'],
            2000)
        base.type_select(apartmentContractPage.typeMould['payment_type'],
                         'NORMAL')
        base.type_select(apartmentContractPage.typeMould['payment_cycle'],
                         'TOW_MONTH')
        base.script(
            "$('#contract_strategy_table > table > tbody > tr > td:nth-child(8) > input').click()"
        )
        base.type_date(
            apartmentContractPage.
            addApartmentContractMould['rent_strategy1_end_loc'],
            addDays(-1, addMonths(24)))
        base.click(
            apartmentContractPage.addApartmentContractMould['next_loc_1'])
        base.click(
            apartmentContractPage.addApartmentContractMould['next_loc_2'])
        base.click(
            apartmentContractPage.addApartmentContractMould['submit_loc'])
        base.check_submit()
        consoleLog(u'已成功续签承租合同 %s' % contractNum)
        time.sleep(10)
        achievementCount = sqlbase.get_count(
            "SELECT * from apartment_contract_achievement where contract_id = "
            "(SELECT contract_id from apartment_contract where contract_num = '%s' and deleted = 0)"
            % contractNum)
        receiptsCount = sqlbase.get_count(
            "SELECT * from apartment_contract_receipts where contract_id = "
            "(SELECT contract_id from apartment_contract where contract_num = '%s' and deleted = 0)"
            % contractNum)
        base.diffAssert(lambda t: asserts(achievementCount).is_not_zero(),
                        1070, u'续签后,没有生成出单业绩')
        base.diffAssert(lambda t: asserts(receiptsCount).is_not_zero(), 1070,
                        u'续签后,原合同押金没有转入新合同中')
def test_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(27)))
        try:
            base.wait_element(apartmentContractPage.alertInfo)
        except TimeoutException:
            consoleLog(
                u'出租合同 %s 新签成功,续签承租到期日为 %s' %
                (contractInfo['contractNum'], addDays(1, addMonths(27))))
            base.diffAssert(lambda t: asserts('a').ends_with('b'), 1071,
                            u'续签出租合同,承租到期日超过委托合同实际到期日时,没有弹出超过时间的提示')