def approve(self, user): ''' Approve this SubmittedPriceList. This causes its rows of pricing data to be converted to Contract models, which are then accessible via CALC's API and in the Data Explorer. ''' self._change_status(self.STATUS_APPROVED, user) for row in self.rows.filter(is_muted=False): if row.contract_model is not None: raise AssertionError() contract = Contract( idv_piid=self.contract_number, contract_start=self.contract_start, contract_end=self.contract_end, vendor_name=self.vendor_name, labor_category=row.labor_category, education_level=row.education_level, min_years_experience=row.min_years_experience, contractor_site=self.contractor_site, schedule=self.get_schedule_title(), business_size=self.get_business_size_string(), sin=row.sin, keywords=row.keywords, certifications=row.certifications, security_clearance=row.security_clearance, ) contract.adjust_contract_year() # Assuming the rate in the price list is the 'base rate' # Escalate the hourly_rate_yearX fields contract.escalate_hourly_rate_fields(row.base_year_rate, self.escalation_rate) # Update current/next/second year price fields contract.update_price_fields() contract.full_clean(exclude=['piid']) contract.save() row.contract_model = contract row.save() self.save()
def approve(self, user): ''' Approve this SubmittedPriceList. This causes its rows of pricing data to be converted to Contract models, which are then accessible via CALC's API and in the Data Explorer. ''' self._change_status(self.STATUS_APPROVED, user) for row in self.rows.filter(is_muted=False): if row.contract_model is not None: raise AssertionError() contract = Contract( idv_piid=self.contract_number, contract_start=self.contract_start, contract_end=self.contract_end, vendor_name=self.vendor_name, labor_category=row.labor_category, education_level=row.education_level, min_years_experience=row.min_years_experience, contractor_site=self.contractor_site, schedule=self.get_schedule_title(), business_size=self.get_business_size_string(), sin=row.sin, ) contract.adjust_contract_year() # Assuming the rate in the price list is the 'base rate' # Escalate the hourly_rate_yearX fields contract.escalate_hourly_rate_fields( row.base_year_rate, self.escalation_rate) # Update current/next/second year price fields contract.update_price_fields() contract.full_clean(exclude=['piid']) contract.save() row.contract_model = contract row.save() self.save()