Esempio n. 1
0
    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'
Esempio n. 3
0
    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'