diff --git a/netforce_clinic/layouts/clinic_account_payment_form.xml b/netforce_clinic/layouts/clinic_account_payment_form.xml
deleted file mode 100644
index ca8daca..0000000
--- a/netforce_clinic/layouts/clinic_account_payment_form.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/netforce_clinic/layouts/clinic_cust_invoice_form.xml b/netforce_clinic/layouts/clinic_cust_invoice_form.xml
index fcc409b..175ea6c 100644
--- a/netforce_clinic/layouts/clinic_cust_invoice_form.xml
+++ b/netforce_clinic/layouts/clinic_cust_invoice_form.xml
@@ -5,6 +5,5 @@
-
diff --git a/netforce_clinic/models/__init__.py b/netforce_clinic/models/__init__.py
index 0bfacc5..e9f6029 100644
--- a/netforce_clinic/models/__init__.py
+++ b/netforce_clinic/models/__init__.py
@@ -51,9 +51,7 @@ from . import gen_visit_line
from . import gen_visit_time
from . import payment
from . import account_payment
-from . import account_payment_line
from . import account_invoice
-from . import account_invoice_line
from . import staff
from . import staff_categ
from . import staff_level
diff --git a/netforce_clinic/models/account_invoice.py b/netforce_clinic/models/account_invoice.py
index 817f7dd..cb48057 100644
--- a/netforce_clinic/models/account_invoice.py
+++ b/netforce_clinic/models/account_invoice.py
@@ -8,8 +8,6 @@ class AccountInvoice(Model):
'clinic_expense_id': fields.Many2One("clinic.hd.case.expense","Expense"),
'department_id': fields.Many2One("clinic.department","Department",search=True),
'patient_partner_id': fields.Many2One("partner","Patient",search=True),
- 'hdcase_credit': fields.Boolean("HD Case Credit"),
- 'hdcase_reconcile': fields.Boolean("HD Case Reconcile"),
}
def _get_number(self,context={}):
@@ -78,249 +76,4 @@ class AccountInvoice(Model):
}
get_model("account.fixed.asset").create(vals)
- def post(self,ids,context={}):
- t0=time.time()
- settings=get_model("settings").browse(1)
- for obj in self.browse(ids):
- obj.check_related()
- if abs(obj.amount_total)<0.001:
- raise Exception("Invoice total is zero")
- partner=obj.partner_id
- if obj.type=="out":
- account_id=partner.account_receivable_id.id or settings.account_receivable_id.id
- if not account_id:
- raise Exception("Account receivable not found")
- elif obj.type=="in":
- account_id=partner.account_payable_id.id or settings.account_payable_id.id
- if not account_id:
- raise Exception("Account payable not found")
- sign=obj.type=="out" and 1 or -1
- if obj.inv_type=="credit":
- sign*=-1
- obj.write({"account_id": account_id})
- if obj.type=="out":
- desc="Sale; "+partner.name
- elif obj.type=="in":
- desc="Purchase; "+partner.name
- if obj.type=="out":
- journal_id=settings.sale_journal_id.id
- if not journal_id:
- raise Exception("Sales journal not found")
- elif obj.type=="in":
- journal_id=settings.purchase_journal_id.id
- if not journal_id:
- raise Exception("Purchases journal not found")
- if obj.currency_rate:
- currency_rate=obj.currency_rate
- else:
- if obj.currency_id.id==settings.currency_id.id:
- currency_rate=1.0
- else:
- rate_from=obj.currency_id.get_rate(date=obj.date)
- if not rate_from:
- raise Exception("Missing currency rate for %s"%obj.currency_id.code)
- rate_to=settings.currency_id.get_rate(date=obj.date)
- if not rate_to:
- raise Exception("Missing currency rate for %s"%settings.currency_id.code)
- currency_rate=rate_from/rate_to
- obj.write({"currency_rate":currency_rate})
- move_vals={
- "journal_id": journal_id,
- "number": obj.number,
- "date": obj.date,
- "ref": obj.ref,
- "narration": desc,
- "related_id": "account.invoice,%s"%obj.id,
- "company_id": obj.company_id.id,
- }
- lines=[]
- taxes={}
- tax_nos=[]
- t01=time.time()
- total_amt=0.0
- total_base=0.0
- total_tax=0.0
- for line in obj.lines:
- cur_amt=get_model("currency").convert(line.amount,obj.currency_id.id,settings.currency_id.id,rate=currency_rate)
- total_amt+=cur_amt
- tax_id=line.tax_id
- if tax_id and obj.tax_type!="no_tax":
- base_amt=get_model("account.tax.rate").compute_base(tax_id,cur_amt,tax_type=obj.tax_type)
- tax_comps=get_model("account.tax.rate").compute_taxes(tax_id,base_amt,when="invoice")
- for comp_id,tax_amt in tax_comps.items():
- tax_vals=taxes.setdefault(comp_id,{"tax_amt":0,"base_amt":0})
- tax_vals["tax_amt"]+=tax_amt
- tax_vals["base_amt"]+=base_amt
- total_tax+=tax_amt
- else:
- base_amt=cur_amt
- total_base+=base_amt
- acc_id=line.account_id.id
- if not acc_id:
- raise Exception("Missing line account for invoice line '%s'"%line.description)
- amt=base_amt*sign
- line_vals={
- "description": line.description,
- "account_id": acc_id,
- "credit": amt>0 and amt or 0,
- "debit": amt<0 and -amt or 0,
- "track_id": line.track_id.id,
- "track2_id": line.track2_id.id,
- "partner_id": partner.id,
- }
- lines.append(line_vals)
- for comp_id,tax_vals in taxes.items():
- comp=get_model("account.tax.component").browse(comp_id)
- acc_id=comp.account_id.id
- if not acc_id:
- raise Exception("Missing account for tax component %s"%comp.name)
- amt=tax_vals["tax_amt"]*sign
- line_vals={
- "description": desc,
- "account_id": acc_id,
- "credit": amt>0 and amt or 0,
- "debit": amt<0 and -amt or 0,
- "tax_comp_id": comp_id,
- "tax_base": tax_vals["base_amt"],
- "partner_id": partner.id,
- "invoice_id": obj.id,
- }
- if comp.type in ("vat","vat_exempt"):
- if obj.type=="out":
- if obj.tax_no:
- tax_no=obj.tax_no
- else:
- tax_no=self.gen_tax_no(exclude=tax_nos,context={"date":obj.date})
- tax_nos.append(tax_no)
- obj.write({"tax_no":tax_no})
- line_vals["tax_no"]=tax_no
- elif obj.type=="in":
- line_vals["tax_no"]=obj.tax_no
- lines.append(line_vals)
- if obj.tax_type=="tax_in":
- rounding=total_amt-(total_base+total_tax)
- if abs(rounding)>0.00499: # XXX
- amt=rounding*sign
- if not settings.rounding_account_id.id:
- raise Exception("Missing rounding account in financial settings")
- line_vals={
- "description": desc,
- "account_id": settings.rounding_account_id.id,
- "credit": amt>0 and amt or 0,
- "debit": amt<0 and -amt or 0,
- "partner_id": partner.id,
- "invoice_id": obj.id,
- }
- lines.append(line_vals)
- t02=time.time()
- dt01=(t02-t01)*1000
- print("post dt01",dt01)
- groups={}
- keys=["description","account_id","track_id","tax_comp_id","partner_id","invoice_id","reconcile_id"]
- for line in lines:
- key_val=tuple(line.get(k) for k in keys)
- if key_val in groups:
- group=groups[key_val]
- group["debit"]+=line["debit"]
- group["credit"]+=line["credit"]
- if line.get("tax_base"):
- if "tax_base" not in group:
- group["tax_base"]=0
- group["tax_base"]+=line["tax_base"]
- else:
- groups[key_val]=line.copy()
- group_lines=sorted(groups.values(),key=lambda l: (l["debit"],l["credit"]))
- for line in group_lines:
- amt=line["debit"]-line["credit"]
- amt=get_model("currency").round(settings.currency_id.id,amt)
- if amt>=0:
- line["debit"]=amt
- line["credit"]=0
- else:
- line["debit"]=0
- line["credit"]=-amt
-
- is_match=False
- if obj.hdcase_reconcile and obj.type=='out':
- print("#POST: clinic customize")
- cst=get_model('clinic.setting').browse(1)
- prod_acc=cst.get_product_account
- move_vals["lines"]=[]
- for line in group_lines:
- desc=line['description']
- if not desc:
- print("skip no description ", obj.number)
- continue
- ar_debit_id=None
- #ar_credit_id=None
- # search from patient_type
- for prod_id in get_model('product').search([['name','=',desc]]):
- for ptype_id in get_model("clinic.patient.type").search([['contact_id','=',partner.id]]):
- acc=prod_acc(prod_id,ptype_id,'credit')
- #ar_credit_id=acc.get("ar_credit_id")
- ar_debit_id=acc.get("ar_debit_id")
- if ar_debit_id:
- break
-
- # search from patient
- if not ar_debit_id:
- for pt in get_model('clinic.patient').search_browse([['partner_id','=',partner.id]]):
- acc=prod_acc(prod_id,pt.type_id.id,'credit')
- ar_debit_id=acc.get("ar_debit_id")
- if ar_debit_id:
- break
- if not ar_debit_id:
- raise Exception("Missing AR Debit Account for product %s"%(desc), partner.id, partner.name)
- line_vals={
- "description": desc,
- "account_id": ar_debit_id,
- "debit": line['credit'],
- "credit": 0,
- "due_date": obj.due_date,
- "partner_id": partner.id,
- 'track_id': line['track_id'],
- }
- move_vals["lines"]+=[("create",line_vals)]
- move_vals["lines"]+=[("create",vals) for vals in group_lines]
- is_match=True
- if not is_match:
- print("#POST: standard account")
- amt=0
- for line in group_lines:
- amt-=line["debit"]-line["credit"]
- line_vals={
- "description": desc,
- "account_id": account_id,
- "debit": amt>0 and amt or 0,
- "credit": amt<0 and -amt or 0,
- "due_date": obj.due_date,
- "partner_id": partner.id,
- }
- acc=get_model("account.account").browse(account_id)
- if acc.currency_id.id!=settings.currency_id.id:
- if acc.currency_id.id!=obj.currency_id.id:
- raise Exception("Invalid account currency for this invoice: %s"%acc.code)
- line_vals["amount_cur"]=obj.amount_total*sign
- move_vals["lines"]=[("create",line_vals)]
- move_vals["lines"]+=[("create",vals) for vals in group_lines]
-
- t03=time.time()
- dt02=(t03-t02)*1000
- print("post dt02",dt02)
- move_id=get_model("account.move").create(move_vals)
- t04=time.time()
- dt03=(t04-t03)*1000
- print("post dt03",dt03)
- get_model("account.move").post([move_id])
- t05=time.time()
- dt04=(t05-t04)*1000
- print("post dt04",dt04)
- obj.write({"move_id":move_id,"state":"waiting_payment"})
- t06=time.time()
- dt05=(t06-t05)*1000
- print("post dt05",dt05)
- t1=time.time()
- dt=(t1-t0)*1000
- print("invoice.post <<< %d ms"%dt)
-
AccountInvoice.register()
diff --git a/netforce_clinic/models/account_invoice_line.py b/netforce_clinic/models/account_invoice_line.py
deleted file mode 100644
index 0d20259..0000000
--- a/netforce_clinic/models/account_invoice_line.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import time
-
-from netforce.model import Model, fields, get_model
-
-class AccountInvoiceLine(Model):
- _inherit="account.invoice.line"
- _fields={
- 'ar_credit_id': fields.Many2One("account.account","Account Credit"),
- "ar_debit_id": fields.Many2One("account.account","Account Debit"),
- }
-
-
-AccountInvoiceLine.register()
diff --git a/netforce_clinic/models/account_payment.py b/netforce_clinic/models/account_payment.py
index 362fe40..6699a04 100644
--- a/netforce_clinic/models/account_payment.py
+++ b/netforce_clinic/models/account_payment.py
@@ -6,7 +6,6 @@ from netforce.model import Model, fields, get_model
class AccountPayment(Model):
_inherit="account.payment"
_fields={
- 'rd_cust': fields.Boolean("RD Customize"),
'number': fields.Char("Number",required=True,search=True),
}
@@ -51,564 +50,4 @@ class AccountPayment(Model):
},
}
- def import_payment(self,ids,context={}):
- if not ids:
- raise Exception("Please save payment before import")
- return {
- 'next': {
- 'name': 'clinic_import_uc',
- 'refer_id': ids[0], #XXX
- }
- }
-
- def clinic_post(self,ids,context={}):
- print("account_payment.post")
- obj=self.browse(ids)[0]
- settings=get_model("settings").browse(1)
- if obj.currency_rate:
- currency_rate=obj.currency_rate
- else:
- if obj.currency_id.id==settings.currency_id.id:
- currency_rate=1.0
- else:
- rate_from=obj.currency_id.get_rate(date=obj.date)
- if not rate_from:
- raise Exception("Missing currency rate for %s"%obj.currency_id.code)
- rate_to=settings.currency_id.get_rate(date=obj.date)
- if not rate_to:
- raise Exception("Missing currency rate for %s"%settings.currency_id.code)
- currency_rate=rate_from/(rate_to or 1)
- obj.write({"currency_rate":currency_rate})
- if obj.pay_type=="direct":
- desc=obj.memo or obj.ref or obj.partner_id.name or obj.number # XXX: as in myob?
- elif obj.pay_type=="invoice":
- desc=obj.memo or "Payment; %s"%obj.partner_id.name # XXX: as in myob?
- elif obj.pay_type=="prepay":
- desc="Prepayment: %s"%obj.partner_id.name
- elif obj.pay_type=="overpay":
- desc="Overpayment: %s"%obj.partner_id.name
- elif obj.pay_type=="refund":
- desc="Refund: %s"%obj.partner_id.name
- elif obj.pay_type=="claim":
- desc="Expense claim payment"
- elif obj.pay_type=="adjust":
- desc="Adjustment"
- else:
- desc="Payment: %s"%obj.partner_id.name
- if obj.type=="in":
- journal_id=settings.pay_in_journal_id.id
- if not journal_id:
- raise Exception("Receipts journal not found")
- elif obj.type=="out":
- journal_id=settings.pay_out_journal_id.id
- if not journal_id:
- raise Exception("Disbursements journal not found")
- if not obj.number:
- raise Exception("Missing payment number")
- move_vals={
- "journal_id": journal_id,
- "number": obj.number,
- "date": obj.date,
- "narration": desc,
- "related_id": "account.payment,%s"%obj.id,
- "company_id": obj.company_id.id,
- }
- move_id=get_model("account.move").create(move_vals)
- lines=[]
- track_id=None
- for line in obj.lines: # XXX
- if line.track_id:
- if track_id:
- track_id=None
- break
- else:
- track_id=line.track_id.id
- amt=get_model("currency").convert(obj.amount_payment,obj.currency_id.id,settings.currency_id.id,rate=currency_rate)
- if obj.type=="out":
- amt=-amt
- line_vals={
- "move_id": move_id,
- "account_id": obj.account_id.id,
- "description": desc,
- "track_id": track_id,
- "debit": amt>0 and amt or 0,
- "credit": amt<0 and -amt or 0,
- }
- if obj.account_id.currency_id.id!=settings.currency_id.id:
- if obj.account_id.currency_id.id!=obj.currency_id.id:
- raise Exception("Invalid account currency for this payment: %s"%obj.account_id.code)
- line_vals["amount_cur"]=obj.amount_payment if obj.type=="in" else -obj.amount_payment
- get_model("account.move.line").create(line_vals)
- taxes={}
- reconcile_ids=[]
- total_over=0
- for line in obj.lines:
- if line.type in ("direct","prepay"):
- cur_amt=get_model("currency").convert(line.amount,obj.currency_id.id,settings.currency_id.id,rate=currency_rate)
- tax=line.tax_id
- if tax and obj.tax_type!="no_tax":
- base_amt=get_model("account.tax.rate").compute_base(tax.id,cur_amt,tax_type=obj.tax_type)
- tax_comps=get_model("account.tax.rate").compute_taxes(tax.id,base_amt,when="direct_payment")
- for comp_id,tax_amt in tax_comps.items():
- if comp_id in taxes:
- tax_vals=taxes[comp_id]
- tax_vals["amount_base"]+=base_amt
- tax_vals["amount_tax"]+=tax_amt
- else:
- tax_vals={
- "tax_comp_id": comp_id,
- "amount_base": base_amt,
- "amount_tax": tax_amt,
- }
- taxes[comp_id]=tax_vals
- else:
- base_amt=cur_amt
- if obj.type=="out":
- amt=base_amt
- else:
- amt=-base_amt
- line_vals={
- "move_id": move_id,
- "description": line.description or desc,
- "account_id": line.account_id.id,
- "debit": amt>0 and amt or 0,
- "credit": amt<0 and -amt or 0,
- "track_id": line.track_id.id,
- "track2_id": line.track2_id.id,
- }
- print("direct")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- elif line.type in ("invoice","refund"):
- inv=line.invoice_id
- inv_taxes={}
- if inv.inv_type in ("invoice","credit","debit"):
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": inv.account_id.id,
- "due_date": inv.due_date,
- "partner_id": inv.partner_id.id,
- }
- if line.amount_currency>inv.amount_due:
- pay_amt=inv.amount_due
- over_amt=line.amount_currency-inv.amount_due
- total_over+=get_model("currency").convert(over_amt,inv.currency_id.id,settings.currency_id.id,rate=inv.currency_rate)
- else:
- pay_amt=line.amount_currency
- pay_ratio=pay_amt/inv.amount_total
- inv_amt=inv.amount_total*pay_ratio
- cur_inv_amt=get_model("currency").convert(inv_amt,inv.currency_id.id,settings.currency_id.id,rate=inv.currency_rate)
- if obj.type=="out":
- amt=cur_inv_amt
- else:
- amt=-cur_inv_amt
- if amt>0:
- line_vals["debit"]=amt
- else:
- line_vals["credit"]=-amt
- if inv.account_id.currency_id.id!=settings.currency_id.id:
- if obj.type=="out":
- line_vals["amount_cur"]=inv_amt
- else:
- line_vals["amount_cur"]=-inv_amt
- print("invoice")
- pprint(line_vals)
- pay_line_id=get_model("account.move.line").create(line_vals)
- if inv.reconcile_move_line_id:
- inv_line_id=inv.reconcile_move_line_id.id
- elif inv.move_id: # XXX
- inv_line_id=inv.move_id.lines[0].id
- else:
- inv_line_id=None
- if inv_line_id:
- reconcile_ids.append([pay_line_id,inv_line_id])
- for invline in inv.lines:
- tax=invline.tax_id
- if tax and inv.tax_type!="no_tax": # XXX: simplify this
- cur_line_amt_inv=get_model("currency").convert(invline.amount*pay_ratio,inv.currency_id.id,settings.currency_id.id,rate=inv.currency_rate)
- base_amt=get_model("account.tax.rate").compute_base(tax.id,cur_line_amt_inv,tax_type=inv.tax_type)
- tax_comps=get_model("account.tax.rate").compute_taxes(tax.id,base_amt,when="invoice_payment_inv")
- for comp_id,tax_amt in tax_comps.items():
- if comp_id in inv_taxes:
- tax_vals=inv_taxes[comp_id]
- tax_vals["amount_base"]+=base_amt
- tax_vals["amount_tax"]+=tax_amt
- else:
- tax_vals={
- "tax_comp_id": comp_id,
- "amount_base": base_amt,
- "amount_tax": tax_amt,
- }
- inv_taxes[comp_id]=tax_vals
- cur_line_amt_pmt=get_model("currency").convert(invline.amount*pay_ratio,inv.currency_id.id,settings.currency_id.id,rate=inv.currency_rate) # XXX: check this
- base_amt=get_model("account.tax.rate").compute_base(tax.id,cur_line_amt_pmt,tax_type=inv.tax_type)
- tax_comps=get_model("account.tax.rate").compute_taxes(tax.id,base_amt,when="invoice_payment_pmt")
- for comp_id,tax_amt in tax_comps.items():
- if comp_id in inv_taxes:
- tax_vals=inv_taxes[comp_id]
- tax_vals["amount_base"]+=base_amt
- tax_vals["amount_tax"]+=tax_amt
- else:
- tax_vals={
- "tax_comp_id": comp_id,
- "amount_base": base_amt,
- "amount_tax": tax_amt,
- }
- inv_taxes[comp_id]=tax_vals
- elif inv.inv_type=="overpay":
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": inv.account_id.id,
- "partner_id": inv.partner_id.id,
- }
- amt=line.amount
- if obj.type=="out":
- line_vals["debit"]=amt
- else:
- line_vals["credit"]=amt
- print("overpay")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- elif inv.inv_type=="prepay":
- for oline in inv.lines:
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": oline.account_id.id,
- }
- amt=oline.amount*line.amount/inv.amount_total # XXX: currency
- tax=oline.tax_id
- if tax:
- base_amt=get_model("account.tax.rate").compute_base(tax.id,amt,tax_type=inv.tax_type)
- else:
- base_amt=amt
- if obj.type=="out":
- line_vals["debit"]=base_amt
- else:
- line_vals["credit"]=base_amt
- print("prepay")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- if tax and inv.tax_type!="no_tax":
- tax_comps=get_model("account.tax.rate").compute_taxes(tax.id,base_amt,when="invoice") # XXX
- for comp_id,tax_amt in tax_comps.items():
- if comp_id in inv_taxes:
- tax_vals=inv_taxes[comp_id]
- tax_vals["amount_base"]+=base_amt
- tax_vals["amount_tax"]+=tax_amt
- else:
- tax_vals={
- "tax_comp_id": comp_id,
- "amount_base": base_amt,
- "amount_tax": tax_amt,
- }
- inv_taxes[comp_id]=tax_vals
- for comp_id,inv_tax_vals in inv_taxes.items():
- comp=get_model("account.tax.component").browse(comp_id)
- if comp.type in ("vat","vat_defer"):
- acc_id=comp.account_id.id
- if not acc_id:
- raise Exception("Missing account for tax component %s"%comp.name)
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": acc_id,
- "tax_comp_id": comp_id,
- "tax_base": inv_tax_vals["amount_base"],
- "partner_id": obj.partner_id.id,
- "invoice_id": inv.id,
- }
- if comp.type=="vat":
- if inv.type=="out":
- if line.tax_no:
- tax_no=line.tax_no
- else:
- tax_no=get_model("account.invoice").gen_tax_no(context={"date":obj.date})
- line.write({"tax_no":tax_no})
- line_vals["tax_no"]=tax_no
- elif inv.type=="in":
- line_vals["tax_no"]=line.tax_no
- amt=inv_tax_vals["amount_tax"]
- if obj.type=="in":
- amt=-amt
- if amt>0:
- line_vals["debit"]=amt
- else:
- line_vals["credit"]=-amt
- print("tax")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- elif comp.type=="wht":
- if comp_id in taxes:
- tax_vals=taxes[comp_id]
- tax_vals["amount_base"]+=inv_tax_vals["amount_base"]
- tax_vals["amount_tax"]+=inv_tax_vals["amount_tax"]
- else:
- taxes[comp_id]=inv_tax_vals.copy()
- elif line.type=="claim":
- expense=line.expense_id
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": settings.unpaid_claim_id.id,
- }
- amt=line.amount
- if obj.type=="out":
- line_vals["debit"]=amt
- else:
- line_vals["credit"]=amt
- print("claim")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- elif line.type=="adjust":
- cur_amt=get_model("currency").convert(line.amount,obj.currency_id.id,settings.currency_id.id,rate=currency_rate)
- tax_base=get_model("currency").convert(line.tax_base or 0,obj.currency_id.id,settings.currency_id.id,rate=currency_rate)
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": line.account_id.id,
- "tax_comp_id": line.tax_comp_id.id,
- "tax_base": tax_base,
- "track_id": line.track_id.id,
- "partner_id": obj.partner_id.id,
- }
- if obj.type=="in":
- cur_amt=-cur_amt
- if cur_amt>0:
- line_vals["debit"]=cur_amt
- else:
- line_vals["credit"]=-cur_amt
- print("adjust")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- if total_over>0.01:
- partner=obj.partner_id
- if obj.type=="in":
- account_id=partner.account_receivable_id.id or settings.account_receivable_id.id
- if not account_id:
- raise Exception("Account receivable not found")
- elif obj.type=="out":
- account_id=partner.account_payable_id.id or settings.account_payable_id.id
- if not account_id:
- raise Exception("Account payable not found")
- line_vals={
- "move_id": move_id,
- "description": context.get("overpay_description",""),
- "account_id": account_id,
- "track_id": line.track_id.id,
- "partner_id": obj.partner_id.id,
- }
- if obj.type=="out":
- line_vals["debit"]=total_over
- else:
- line_vals["credit"]=total_over
- print("overpay")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- inv_line_vals={
- "description": context.get("overpay_description",""),
- "account_id": account_id,
- "amount": total_over,
- }
- inv_vals={
- "type": obj.type=="in" and "out" or "in",
- "inv_type": "overpay",
- "partner_id": obj.partner_id.id,
- "date": obj.date,
- "tax_type": "no_tax",
- "lines": [("create",inv_line_vals)],
- "state": "waiting_payment",
- "payment_id": obj.id,
- "account_id": account_id,
- }
- inv_id=get_model("account.invoice").create(inv_vals)
- wht_no=get_model("account.payment").gen_wht_no(context={"date":obj.date})
- for comp_id,tax_vals in sorted(taxes.items()):
- comp=get_model("account.tax.component").browse(comp_id)
- acc_id=comp.account_id.id
- if not acc_id:
- raise Exception("Missing account for tax component %s"%comp.name)
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": acc_id,
- "tax_comp_id": comp_id,
- "tax_base": tax_vals["amount_base"],
- "partner_id": obj.partner_id.id,
- }
- if comp.type=="vat":
- if obj.type=="in":
- if obj.tax_no:
- tax_no=obj.tax_no
- else:
- tax_no=get_model("account.invoice").gen_tax_no(context={"date":obj.date})
- obj.write({"tax_no":tax_no})
- line_vals["tax_no"]=tax_no
- elif obj.type=="out":
- line_vals["tax_no"]=obj.tax_no
- elif comp.type=="wht":
- if obj.type=="out":
- # 1 Payment should have same wht_no
- #wht_no=get_model("account.payment").gen_wht_no(context={"date":obj.date})
- line_vals["tax_no"]=wht_no
- amt=tax_vals["amount_tax"]
- if obj.type=="in":
- amt=-amt
- if amt>0:
- line_vals["debit"]=amt
- else:
- line_vals["credit"]=-amt
- print("tax")
- pprint(line_vals)
- get_model("account.move.line").create(line_vals)
- amt=0
- move=get_model("account.move").browse(move_id)
- for line in move.lines:
- amt+=line.credit-line.debit
- if amt>0.001:
- if not settings.currency_loss_id:
- raise Exception("Missing currency loss account")
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": settings.currency_loss_id.id,
- "debit": amt,
- "credit": 0,
- }
- get_model("account.move.line").create(line_vals)
- elif amt<-0.001:
- if not settings.currency_gain_id:
- raise Exception("Missing currency gain account")
- line_vals={
- "move_id": move_id,
- "description": desc,
- "account_id": settings.currency_loss_id.id,
- "debit": 0,
- "credit": -amt,
- }
- get_model("account.move.line").create(line_vals)
- get_model("account.move").post([move_id])
- obj.write({"move_id":move_id,"state":"posted"})
- for rec_lines in reconcile_ids:
- get_model("account.move.line").reconcile(rec_lines,context=context)
- obj.create_prepay_invoice()
-
- def post(self,ids,context={}):
- obj=self.browse(ids)[0]
- res=None
- hdcase_reconcile=context.get('hdcase_reconcile')
- if hdcase_reconcile and obj.pay_type=="invoice":
- obj.clinic_post(context=context)
- elif obj.rd_cust:
- res={}
- print("RD Customize")
- desc="Recieved %s"%obj.partner_id.name
- for ivline in obj.invoice_lines:
- invoice=ivline.invoice_id
- partner_id=invoice.partner_id.id
- for mline in invoice.move_id.lines:
- if mline.debit>0:
- amt=mline.debit or 0
- account_id=mline.account_id.id
- if not res.get(account_id):
- res[account_id]={
- 'credit': 0,
- 'debit': 0,
- 'description': desc,
- 'partner_id': partner_id
- }
- res[account_id]['credit']+=amt
- settings=get_model("settings").browse(1)
- if obj.type=="in":
- journal_id=obj.journal_id.id or settings.pay_in_journal_id.id
- if not journal_id:
- raise Exception("Receipts journal not found")
- elif obj.type=="out":
- journal_id=obj.journal_id.id or settings.pay_out_journal_id.id
- if not journal_id:
- raise Exception("Disbursements journal not found")
- if not obj.number:
- raise Exception("Missing payment number")
- move_vals={
- "journal_id": journal_id,
- "number": obj.number,
- "date": obj.date,
- "narration": desc,
- "related_id": "account.payment,%s"%obj.id,
- "company_id": obj.company_id.id,
- }
- move_id=get_model("account.move").create(move_vals)
- track_id=None
- for line in obj.lines: # XXX
- if line.track_id:
- if track_id:
- track_id=None
- break
- else:
- track_id=line.track_id.id
- lines1=[]
- lines1.append(('create',{
- "move_id": move_id,
- "account_id": obj.account_id.id,
- "description": desc,
- "track_id": track_id,
- 'debit': 0,
- 'credit':0,
- }))
- lines2=[]
- for account_id, rvals in res.items():
- amt=rvals['credit'] or 0
- lines1[0][1]['debit']+=amt #XXX
- lines2.append(('create',{
- "move_id": move_id,
- "account_id": account_id,
- "description": rvals['description'],
- 'partner_id': rvals['partner_id'],
- 'debit': rvals['debit'],
- 'credit': rvals['credit'],
- "track_id": track_id,
- }))
-
- if obj.type=="in":
- rate_type="sell"
- else:
- rate_type="buy"
- adjust_lines=[]
- adjust_amt=0
- for jline in obj.adjust_lines:
- cur_amt=get_model("currency").convert(line.amount,obj.currency_id.id,settings.currency_id.id,date=obj.date,rate_type=rate_type)
- tax_base=get_model("currency").convert(line.tax_base or 0,obj.currency_id.id,settings.currency_id.id,date=obj.date,rate_type=rate_type)
- cur_amt=abs(cur_amt)
- adjust_lines.append(('create',{
- "move_id": move_id,
- "description": desc,
- "account_id": line.account_id.id,
- "tax_comp_id": line.tax_comp_id.id,
- "tax_base": tax_base,
- "track_id": line.track_id.id,
- "partner_id": obj.partner_id.id,
- "credit":0,
- "debit": cur_amt,
- }))
- #XXX
- adjust_amt+=cur_amt
- lines1[0][1]['debit']-=cur_amt
-
- lines=lines1+adjust_lines+lines2 #debit, debit, credit
- move=get_model("account.move").browse(move_id)
- move.write({
- 'lines': lines,
- })
- move.post()
- obj.write({
- 'move_id': move.id,
- 'state': 'posted',
- })
- print("Done!")
- else:
- res=super().post(ids,context=context)
- return res
-
AccountPayment.register()
diff --git a/netforce_clinic/models/account_payment_line.py b/netforce_clinic/models/account_payment_line.py
deleted file mode 100644
index 654ce64..0000000
--- a/netforce_clinic/models/account_payment_line.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import time
-
-from netforce.model import Model, fields, get_model
-
-class AccountPaymentLine(Model):
- _inherit="account.payment.line"
- _fields={
- 'ar_credit_id': fields.Many2One("account.account","Account Credit"), # no long use
- "ar_debit_id": fields.Many2One("account.account","Account Debit"), # no long use
- }
-
-
-AccountPaymentLine.register()
diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py
index 0fb7213..1fc9e83 100644
--- a/netforce_clinic/models/hd_case.py
+++ b/netforce_clinic/models/hd_case.py
@@ -687,14 +687,11 @@ class HDCase(Model):
"company_id": company_id,
"lines": [],
"company_id": company_id,
- 'hdcase_credit': False,
- 'hdcase_reconcile': True,
}
vals["partner_id"]=partner.id
vals['lines']=rmb_lines
if patient_partner:
vals['patient_partner_id']=patient_partner.id,
- #XXX
if obj.branch_id:
context['branch_id']=obj.branch_id.id
get_model("account.invoice").create(vals,context=context)
@@ -718,13 +715,11 @@ class HDCase(Model):
"lines": [],
"company_id": company_id,
'partner_id':partner.id,
- 'hdcase_credit': True,
- 'hdcase_reconcile': True,
}
vals['lines']=normb_lines
if patient_partner:
vals['patient_partner_id']=patient_partner.id,
- get_model("account.invoice").create(vals,context) # create alway
+ get_model("account.invoice").create(vals,context)
obj.make_pickings()
# prevent douplicate create invoice & picking
diff --git a/netforce_clinic/models/shop.py b/netforce_clinic/models/shop.py
index 41467df..028d799 100644
--- a/netforce_clinic/models/shop.py
+++ b/netforce_clinic/models/shop.py
@@ -333,7 +333,6 @@ class Shop(Model):
"currency_id": currency_id,
"company_id": company_id,
'partner_id': partner.id,
- 'hdcase_reconcile': True,
"lines": [],
}
track_id=obj.branch_id.track_id.id