test
parent
820ec298e7
commit
c61517aef4
|
@ -1,7 +1,7 @@
|
||||||
from . import clinic_setting
|
from . import clinic_setting
|
||||||
from . import update_account_tracking
|
#from . import update_account_tracking
|
||||||
#from . import print_labor_cost
|
#from . import print_labor_cost
|
||||||
#from . import hdcase
|
#from . import hdcase
|
||||||
#from . import remove_conv_bal
|
#from . import remove_conv_bal
|
||||||
#from . import import_acc
|
from . import import_acc
|
||||||
#from . import update_labor_cost_line
|
#from . import update_labor_cost_line
|
||||||
|
|
|
@ -1,40 +1,49 @@
|
||||||
from netforce.model import get_model
|
from netforce.model import get_model
|
||||||
from netforce import migration
|
from netforce import migration
|
||||||
from netforce.access import set_active_user, get_active_user, set_active_company
|
from netforce.access import set_active_user, set_active_company
|
||||||
|
|
||||||
class Migration(migration.Migration):
|
class Migration(migration.Migration):
|
||||||
_name="import.acc"
|
_name="import.acc"
|
||||||
_version="2.11.0"
|
_version="2.10.0"
|
||||||
|
|
||||||
def migrate(self):
|
def migrate(self):
|
||||||
|
set_active_user(1)
|
||||||
set_active_company(1)
|
set_active_company(1)
|
||||||
cbv_id=24
|
cbv_id=24
|
||||||
cbv=get_model("conv.bal").browse(cbv_id)
|
cbv=get_model("conv.bal").browse(cbv_id)
|
||||||
#cbv.write({
|
cbv.write({
|
||||||
#'file': 'tb.csv',
|
'file': 'tb.csv',
|
||||||
#})
|
})
|
||||||
#print("import acc file (step 1) running ...")
|
print("import acc file (step 1) running ...")
|
||||||
#get_model("conv.bal").import_acc([cbv.id],context={})
|
get_model("conv.bal").import_acc_file([cbv.id],context={})
|
||||||
|
get_model("conv.bal").import_acc([cbv.id],context={})
|
||||||
|
|
||||||
#cbv.write({
|
cbv.write({
|
||||||
#'file': 'ar.csv',
|
'file': 'ar.csv',
|
||||||
#})
|
})
|
||||||
#print("import sale file (step 2)running ...")
|
print("import sale file (step 2)running ...")
|
||||||
#get_model("conv.bal").import_sale_file([cbv.id],context={})
|
get_model("conv.bal").import_sale_file([cbv.id],context={})
|
||||||
|
get_model("conv.bal").import_sale([cbv.id],context={})
|
||||||
|
|
||||||
#print("import purch file (step 3) running ...")
|
print("import purch file (step 3) running ...")
|
||||||
#cbv.write({
|
cbv.write({
|
||||||
#'file': 'ap.csv',
|
'file': 'ap.csv',
|
||||||
#})
|
'date_fmt': '%d/%m/%Y',
|
||||||
#get_model("conv.bal").import_purch([cbv.id],context={})
|
})
|
||||||
#print("create invoice from setep 1 to 3 is running...")
|
get_model("conv.bal").import_purch_file([cbv.id],context={})
|
||||||
#print("create_open_entry...")
|
get_model("conv.bal").import_purch([cbv.id],context={})
|
||||||
#print('Done!')
|
|
||||||
#cbv.create_open_entry()
|
cbv.write({
|
||||||
#print("create_sale_invoices...")
|
'date_fmt': '%Y-%m-%d',
|
||||||
#cbv.create_sale_invoices()
|
})
|
||||||
#print("create_purch_invoices...")
|
|
||||||
#cbv.create_purch_invoices()
|
# next 3
|
||||||
|
print("create_open_entry...")
|
||||||
|
cbv.create_open_entry()
|
||||||
|
print("create_sale_invoices...")
|
||||||
|
cbv.create_sale_invoices()
|
||||||
|
print("create_purch_invoices...")
|
||||||
|
cbv.create_purch_invoices()
|
||||||
print("Done!")
|
print("Done!")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -140,3 +140,4 @@ from . import share_location
|
||||||
from . import report_cycle_setting
|
from . import report_cycle_setting
|
||||||
from . import print_labor_cost
|
from . import print_labor_cost
|
||||||
from . import print_labor_cost_line
|
from . import print_labor_cost_line
|
||||||
|
from . import conv_bal
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
import csv
|
||||||
|
import datetime
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
from netforce.model import Model, fields, get_model
|
||||||
|
from netforce.utils import get_file_path
|
||||||
|
|
||||||
|
class ConvBal(Model):
|
||||||
|
_inherit="conv.bal"
|
||||||
|
|
||||||
|
def create_sale_invoices(self,ids,context={}):
|
||||||
|
obj=self.browse(ids)[0]
|
||||||
|
settings=get_model("settings").browse(1)
|
||||||
|
desc="Conversion balance %s"%obj.date
|
||||||
|
for inv in obj.sale_invoices:
|
||||||
|
vals={
|
||||||
|
"type": "out",
|
||||||
|
"inv_type": inv.amount_due>=0 and "invoice" or "credit",
|
||||||
|
"partner_id": inv.contact_id.id,
|
||||||
|
"date": inv.date,
|
||||||
|
"due_date": inv.due_date,
|
||||||
|
"number": inv.number,
|
||||||
|
"ref": inv.ref,
|
||||||
|
"memo": desc,
|
||||||
|
"lines": [],
|
||||||
|
"state": "waiting_payment",
|
||||||
|
"account_id": inv.account_id.id,
|
||||||
|
"reconcile_move_line_id": inv.move_line_id.id,
|
||||||
|
"currency_id": inv.account_id.currency_id.id,
|
||||||
|
"currency_rate": inv.amount_due/inv.amount_cur if inv.amount_cur else None,
|
||||||
|
}
|
||||||
|
line_vals={
|
||||||
|
"description": desc,
|
||||||
|
"amount": abs(inv.amount_cur or inv.amount_due),
|
||||||
|
}
|
||||||
|
vals["lines"].append(("create",line_vals))
|
||||||
|
res=get_model("account.invoice").search([["number","=",inv.number]])
|
||||||
|
if res:
|
||||||
|
inv2_id=res[0]
|
||||||
|
inv2=get_model("account.invoice").browse(inv2_id)
|
||||||
|
#ratchawat
|
||||||
|
inv2.write({
|
||||||
|
'lines': vals['lines'],
|
||||||
|
})
|
||||||
|
#if abs(inv2.amount_total)-abs(inv.amount_due)>0.001: # XXX
|
||||||
|
#raise Exception("Failed to update invoice %s: different amount"%inv.number)
|
||||||
|
#if inv2.state=="draft":
|
||||||
|
#raise Exception("Failed to update invoice %s: invalid state"%inv.number)
|
||||||
|
#inv2.write({
|
||||||
|
#"move_id": obj.move_id.id,
|
||||||
|
#"reconcile_move_line_id": inv.move_line_id.id,
|
||||||
|
#})
|
||||||
|
else:
|
||||||
|
get_model("account.invoice").create(vals)
|
||||||
|
|
||||||
|
def import_sale_file(self,ids,context):
|
||||||
|
obj=self.browse(ids)[0]
|
||||||
|
path=get_file_path(obj.file)
|
||||||
|
data=open(path).read()
|
||||||
|
rd=csv.reader(StringIO(data))
|
||||||
|
headers=next(rd)
|
||||||
|
headers=[h.strip() for h in headers]
|
||||||
|
del_ids=get_model("conv.sale.invoice").search([["conv_id","=",obj.id]])
|
||||||
|
get_model("conv.sale.invoice").delete(del_ids)
|
||||||
|
for row in rd:
|
||||||
|
print("row",row)
|
||||||
|
row+="," #XXX append blank column for Amount Cur
|
||||||
|
line=dict(zip(headers,row))
|
||||||
|
print("line",line)
|
||||||
|
if not line.get("Number"):
|
||||||
|
continue
|
||||||
|
number=line["Number"].strip()
|
||||||
|
if not number:
|
||||||
|
continue
|
||||||
|
ref=line["Reference"].strip()
|
||||||
|
contact_name=line["Contact"].strip()
|
||||||
|
res=get_model("partner").search([["name","=",contact_name]])
|
||||||
|
if not res:
|
||||||
|
raise Exception("Contact not found: '%s'"%contact_name)
|
||||||
|
contact_id=res[0]
|
||||||
|
date=datetime.datetime.strptime(line["Date"].strip(),obj.date_fmt).strftime("%Y-%m-%d")
|
||||||
|
due_date=datetime.datetime.strptime(line["Due Date"].strip(),obj.date_fmt).strftime("%Y-%m-%d")
|
||||||
|
amount_due=float(line["Amount Due"].strip().replace(",","") or 0)
|
||||||
|
acc_code=line["Account"].strip()
|
||||||
|
amount_cur=float(line["Amount Cur"].strip().replace(",","") or 0)
|
||||||
|
acc_codes=acc_code.split(",")
|
||||||
|
if len(acc_codes) > 1:
|
||||||
|
count=0
|
||||||
|
amts=[m.split(":")[1] for m in line['Memo'].split(",")]
|
||||||
|
for acc_code in acc_codes:
|
||||||
|
acc_code=acc_code.strip()
|
||||||
|
res=get_model("account.account").search([["code","=",acc_code]])
|
||||||
|
if not res:
|
||||||
|
raise Exception("Account code not found: %s"%acc_code)
|
||||||
|
acc_id=res[0]
|
||||||
|
amount_due=amts[count]
|
||||||
|
vals={
|
||||||
|
"conv_id": obj.id,
|
||||||
|
"number": number,
|
||||||
|
"ref": ref,
|
||||||
|
"contact_id": contact_id,
|
||||||
|
"date": date,
|
||||||
|
"due_date": due_date,
|
||||||
|
"amount_due": amount_due,
|
||||||
|
"account_id": acc_id,
|
||||||
|
"amount_cur": amount_cur,
|
||||||
|
}
|
||||||
|
get_model("conv.sale.invoice").create(vals)
|
||||||
|
count+=1
|
||||||
|
else:
|
||||||
|
res=get_model("account.account").search([["code","=",acc_code]])
|
||||||
|
if not res:
|
||||||
|
raise Exception("Account code not found: %s"%acc_code)
|
||||||
|
acc_id=res[0]
|
||||||
|
vals={
|
||||||
|
"conv_id": obj.id,
|
||||||
|
"number": number,
|
||||||
|
"ref": ref,
|
||||||
|
"contact_id": contact_id,
|
||||||
|
"date": date,
|
||||||
|
"due_date": due_date,
|
||||||
|
"amount_due": amount_due,
|
||||||
|
"account_id": acc_id,
|
||||||
|
"amount_cur": amount_cur,
|
||||||
|
}
|
||||||
|
get_model("conv.sale.invoice").create(vals)
|
||||||
|
return {
|
||||||
|
"next": {
|
||||||
|
"name": "conv_bal",
|
||||||
|
"active_id": obj.id,
|
||||||
|
"view_xml": "conv_bal2",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvBal.register()
|
Loading…
Reference in New Issue