def transition_create_service_invoice(self): HealthService = Pool().get('gnuhealth.health_service') Invoice = Pool().get('account.invoice') Party = Pool().get('party.party') services = HealthService.browse( Transaction().context.get('active_ids')) invoices = [] #Invoice Header for service in services: if service.state == 'invoiced': self.raise_user_error('duplicate_invoice') invoice_data = {} invoice_data['description'] = service.desc invoice_data['party'] = service.patient.name.id invoice_data['account'] = \ service.patient.name.account_receivable.id party_address = Party.address_get(service.patient.name, type='invoice') invoice_data['invoice_address'] = party_address.id invoice_data['reference'] = service.name invoice_data['payment_term'] = \ service.patient.name.customer_payment_term and \ service.patient.name.customer_payment_term.id or \ False #Invoice Lines seq = 0 invoice_lines = [] for line in service.service_line: seq = seq + 1 account = line['product'].template.account_revenue_used.id if line['to_invoice']: invoice_lines.append(('create', [{ 'product': line['product'].id, 'description': line['desc'], 'quantity': line['qty'], 'account': account, 'unit': line['product'].default_uom.id, 'unit_price': line['product'].list_price, 'sequence': seq }])) invoice_data['lines'] = invoice_lines invoices.append(invoice_data) Invoice.create(invoices) # Change to invoiced the status on the service document. HealthService.write(services, {'state': 'invoiced'}) return 'end'
def transition_create_service_invoice(self): HealthService = Pool().get('gnuhealth.health_service') Invoice = Pool().get('account.invoice') Party = Pool().get('party.party') services = HealthService.browse(Transaction().context.get( 'active_ids')) invoices = [] #Invoice Header for service in services: if service.state == 'invoiced': self.raise_user_error('duplicate_invoice') invoice_data = {} invoice_data['description'] = service.desc invoice_data['party'] = service.patient.name.id invoice_data['account'] = \ service.patient.name.account_receivable.id party_address = Party.address_get(service.patient.name, type='invoice') if not party_address: self.raise_user_error('no_invoice_address') invoice_data['invoice_address'] = party_address.id invoice_data['reference'] = service.name if not service.patient.name.customer_payment_term: self.raise_user_error('no_payment_term') invoice_data['payment_term'] = \ service.patient.name.customer_payment_term.id #Invoice Lines seq = 0 invoice_lines = [] for line in service.service_line: seq = seq + 1 account = line['product'].template.account_revenue_used.id if line['to_invoice']: invoice_lines.append(('create', [{ 'product': line['product'].id, 'description': line['desc'], 'quantity': line['qty'], 'account': account, 'unit': line['product'].default_uom.id, 'unit_price': line['product'].list_price, 'sequence': seq }])) invoice_data['lines'] = invoice_lines invoices.append(invoice_data) Invoice.create(invoices) # Change to invoiced the status on the service document. HealthService.write(services, {'state': 'invoiced'}) return 'end'
def transition_create_chargesheet_invoice(self, session): chargesheet_obj = Pool().get('ids.health.chargesheet') invoice_obj = Pool().get('account.invoice') party_obj = Pool().get('party.party') selected_chargesheets = chargesheet_obj.browse(Transaction().context.get('active_ids')) #Invoice Header for service in selected_chargesheets: if service.state == 'invoiced': self.raise_user_error('duplicate_invoice') #Browse Party's Existing Draft Invoice party_invoice = invoice_obj.search([ ('party', '=', service.patient.name.id), ('reference', '=', service.type), ('state', '=', 'draft'), ], limit=1) invoice_data = {} #Invoice Lines seq = 0 invoice_lines = [] for line in service.lines: seq = seq + 1 account = line['product'].template.account_revenue_used.id if line['to_invoice'] : invoice_lines.append(('create', { 'product': line['product'].id, 'description': line['desc'], 'quantity': line['qty'], 'account': account, 'unit' : line['product'].default_uom.id, 'unit_price' : line['product'].list_price, 'sequence': seq })) invoice_data['lines'] = invoice_lines if party_invoice: invoice = invoice_obj.browse(party_invoice)[0] invoice_obj.write(invoice.id, invoice_data) chargesheet_obj.write(service.id, {'state': 'invoiced'}) return 'end' invoice_data['description'] = service.description invoice_data['party'] = service.patient.name.id invoice_data['account'] = service.patient.name.account_receivable.id invoice_data['invoice_address'] = party_obj.address_get(service.patient.name.id, type='invoice') invoice_data['reference'] = service.type invoice_data['payment_term'] = \ service.patient.name.customer_payment_term and \ service.patient.name.customer_payment_term.id or \ False invoice_document = invoice_obj.create(invoice_data) # Change to invoiced the status on the service document. chargesheet_obj.write(service.id, {'state': 'invoiced'}) return 'end'