print invoice from hd case
							parent
							
								
									8409fc1db7
								
							
						
					
					
						commit
						4fe5529c83
					
				| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					<action>
 | 
				
			||||||
 | 
					    <field name="type">report_odt2</field>
 | 
				
			||||||
 | 
					    <field name="model">account.invoice</field>
 | 
				
			||||||
 | 
					    <field name="method">get_invoice_data</field>
 | 
				
			||||||
 | 
					    <field name="template">cust_invoice</field>
 | 
				
			||||||
 | 
					</action>
 | 
				
			||||||
| 
						 | 
					@ -128,6 +128,9 @@
 | 
				
			||||||
    <related>
 | 
					    <related>
 | 
				
			||||||
        <field name="invoices" click_action="view_invoice">
 | 
					        <field name="invoices" click_action="view_invoice">
 | 
				
			||||||
        <list colors='{"#9f9":[["state","=","paid"]]}'>
 | 
					        <list colors='{"#9f9":[["state","=","paid"]]}'>
 | 
				
			||||||
 | 
					            <head>
 | 
				
			||||||
 | 
					                <button string="Print" action="clinic_hdcase_invoice_print" action_options="convert=pdf" icon="print"/>
 | 
				
			||||||
 | 
					            </head>
 | 
				
			||||||
                <field name="number"/>
 | 
					                <field name="number"/>
 | 
				
			||||||
                <field name="ref"/>
 | 
					                <field name="ref"/>
 | 
				
			||||||
                <field name="inv_type"/>
 | 
					                <field name="inv_type"/>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,10 @@
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from netforce.model import Model, fields, get_model
 | 
					from netforce.model import Model, fields, get_model
 | 
				
			||||||
 | 
					from netforce.utils import get_file_path
 | 
				
			||||||
 | 
					from netforce.access import get_active_company, get_active_user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from . import utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AccountInvoice(Model):
 | 
					class AccountInvoice(Model):
 | 
				
			||||||
    _inherit="account.invoice"
 | 
					    _inherit="account.invoice"
 | 
				
			||||||
| 
						 | 
					@ -310,4 +314,126 @@ class AccountInvoice(Model):
 | 
				
			||||||
        dt=(t1-t0)*1000
 | 
					        dt=(t1-t0)*1000
 | 
				
			||||||
        print("invoice.post <<< %d ms"%dt)
 | 
					        print("invoice.post <<< %d ms"%dt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_invoice_data(self,ids,context={}):
 | 
				
			||||||
 | 
					        settings=get_model('settings').browse(1)
 | 
				
			||||||
 | 
					        pages=[]
 | 
				
			||||||
 | 
					        for obj in self.browse(ids):
 | 
				
			||||||
 | 
					            context['refer_id']=obj.id
 | 
				
			||||||
 | 
					            data=self.get_invoice_page(context=context)
 | 
				
			||||||
 | 
					            limit_item=10
 | 
				
			||||||
 | 
					            if data['state']=='draft':
 | 
				
			||||||
 | 
					                limit_item-=3
 | 
				
			||||||
 | 
					            for i in  range(len(data['lines']),limit_item):
 | 
				
			||||||
 | 
					                data['lines'].append({
 | 
				
			||||||
 | 
					                    'no': '',
 | 
				
			||||||
 | 
					                    'product_name': '',
 | 
				
			||||||
 | 
					                    'description': '',
 | 
				
			||||||
 | 
					                    'uom_name': '',
 | 
				
			||||||
 | 
					                    'qty': None,
 | 
				
			||||||
 | 
					                    'price': None,
 | 
				
			||||||
 | 
					                    'amount': None,
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            pages.append(data)
 | 
				
			||||||
 | 
					        if pages:
 | 
				
			||||||
 | 
					            pages[-1]["is_last_page"]=True
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            "pages": pages,
 | 
				
			||||||
 | 
					            "logo": get_file_path(settings.logo),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_invoice_page(self,context={}):
 | 
				
			||||||
 | 
					        if not context.get('refer_id'):
 | 
				
			||||||
 | 
					            return {}
 | 
				
			||||||
 | 
					        inv_id=int(context['refer_id'])
 | 
				
			||||||
 | 
					        inv=self.browse(inv_id)
 | 
				
			||||||
 | 
					        comp_id=get_active_company()
 | 
				
			||||||
 | 
					        comp=get_model('company').browse(comp_id)
 | 
				
			||||||
 | 
					        context['branch_id']=inv.department_id.branch_id.id
 | 
				
			||||||
 | 
					        st=get_model('settings').browse(1,context=context)
 | 
				
			||||||
 | 
					        cst=get_model('clinic.setting').browse(1)
 | 
				
			||||||
 | 
					        cust=inv.partner_id
 | 
				
			||||||
 | 
					        cust_tax_no=cust.tax_no or ''
 | 
				
			||||||
 | 
					        cust_name=cust.name or ''
 | 
				
			||||||
 | 
					        cust_addr=''
 | 
				
			||||||
 | 
					        if cust.addresses:
 | 
				
			||||||
 | 
					            cust_addr=cust.addresses[0].address_text
 | 
				
			||||||
 | 
					        if 'your' in cust_addr:
 | 
				
			||||||
 | 
					            cust_addr=''
 | 
				
			||||||
 | 
					        no=1
 | 
				
			||||||
 | 
					        sub_total=0
 | 
				
			||||||
 | 
					        amount_total=0
 | 
				
			||||||
 | 
					        lines=[]
 | 
				
			||||||
 | 
					        for line in inv.lines:
 | 
				
			||||||
 | 
					            amt=line.amount or 0
 | 
				
			||||||
 | 
					            prod=line.product_id
 | 
				
			||||||
 | 
					            lines.append({
 | 
				
			||||||
 | 
					                'no': no,
 | 
				
			||||||
 | 
					                'product_name': prod.name or '',
 | 
				
			||||||
 | 
					                'description': line.description or '',
 | 
				
			||||||
 | 
					                'uom_name': prod.uom_id.name or '',
 | 
				
			||||||
 | 
					                'qty': line.qty or 0,
 | 
				
			||||||
 | 
					                'price': line.price or 0,
 | 
				
			||||||
 | 
					                'amount': amt,
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            sub_total+=amt
 | 
				
			||||||
 | 
					            no+=1
 | 
				
			||||||
 | 
					        amount_total=sub_total
 | 
				
			||||||
 | 
					        is_draft=inv.state=='draft' and True or False 
 | 
				
			||||||
 | 
					        is_cheque=False
 | 
				
			||||||
 | 
					        user_id=get_active_user()
 | 
				
			||||||
 | 
					        user=get_model("base.user").browse(user_id)
 | 
				
			||||||
 | 
					        comp_name=comp.name or ""
 | 
				
			||||||
 | 
					        if st.default_address_id.company:
 | 
				
			||||||
 | 
					            comp_name=st.default_address_id.company or ""
 | 
				
			||||||
 | 
					        payment_terms=''
 | 
				
			||||||
 | 
					        currency_code=''
 | 
				
			||||||
 | 
					        due_date=inv.due_date
 | 
				
			||||||
 | 
					        number=inv.number or ""
 | 
				
			||||||
 | 
					        ref=inv.ref or ""
 | 
				
			||||||
 | 
					        payment_terms=inv.payment_terms or ""
 | 
				
			||||||
 | 
					        currency_code=inv.currency_id.code or ""
 | 
				
			||||||
 | 
					        due_date=inv.due_date
 | 
				
			||||||
 | 
					        add=st.default_address_id
 | 
				
			||||||
 | 
					        data={
 | 
				
			||||||
 | 
					            'partner_name': cust_name,
 | 
				
			||||||
 | 
					            'partner_address': cust_addr,
 | 
				
			||||||
 | 
					            'partner_tax_no': cust_tax_no,
 | 
				
			||||||
 | 
					            'due_date': due_date,
 | 
				
			||||||
 | 
					            'currency_code': currency_code,
 | 
				
			||||||
 | 
					            'payment_terms': payment_terms,
 | 
				
			||||||
 | 
					            'comp_name': comp_name,
 | 
				
			||||||
 | 
					            'add_address': add.address or '',
 | 
				
			||||||
 | 
					            'add_address2': add.address2 or '',
 | 
				
			||||||
 | 
					            'add_province_name': add.province_id.name or '',
 | 
				
			||||||
 | 
					            'add_district_name': add.district_id.name or '',
 | 
				
			||||||
 | 
					            'add_subdistrict_name': add.subdistrict_id.name or '',
 | 
				
			||||||
 | 
					            'add_city': add.city or '',
 | 
				
			||||||
 | 
					            'add_postal_code': add.postal_code or '',
 | 
				
			||||||
 | 
					            'add_phone': add.phone or '',
 | 
				
			||||||
 | 
					            'add_fax': add.fax or '',
 | 
				
			||||||
 | 
					            'tax_no': st.tax_no or '',
 | 
				
			||||||
 | 
					            'number': number,
 | 
				
			||||||
 | 
					            'ref': ref,
 | 
				
			||||||
 | 
					            'date': inv.date,
 | 
				
			||||||
 | 
					            'datenow': inv.date or time.strftime("%d/%m/%Y"),
 | 
				
			||||||
 | 
					            'dateprint': inv.date or time.strftime("%d/%m/%Y %H:%M:%S"),
 | 
				
			||||||
 | 
					            'note': inv.note or '',
 | 
				
			||||||
 | 
					            'lines':lines,
 | 
				
			||||||
 | 
					            'amount_subtotal': sub_total,
 | 
				
			||||||
 | 
					            'amount_total': amount_total,
 | 
				
			||||||
 | 
					            'total_text': utils.num2word(amount_total),
 | 
				
			||||||
 | 
					            'is_cheque': is_cheque,
 | 
				
			||||||
 | 
					            'is_draft': is_draft,
 | 
				
			||||||
 | 
					            'user_name': user.name or "",
 | 
				
			||||||
 | 
					            'state': inv.state or "",
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        data['pay_type']='Credit'
 | 
				
			||||||
 | 
					        if st.logo:
 | 
				
			||||||
 | 
					            data['logo']=get_file_path(st.logo)
 | 
				
			||||||
 | 
					        if cst.signature:
 | 
				
			||||||
 | 
					            data['signature']=get_file_path(cst.signature)
 | 
				
			||||||
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AccountInvoice.register()
 | 
					AccountInvoice.register()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue