From caccf2dee8e23b9a4868174f802ea8942483d240 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Fri, 8 Jan 2016 15:08:49 +0700 Subject: [PATCH 01/21] copy date to receipt after pay in hdcase --- netforce_clinic/models/hd_case.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index bd51cb6..11d1fc5 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -520,7 +520,8 @@ class HDCase(Model): "company_id": company_id, "type": "in", "pay_type": "direct", - 'date': time.strftime("%Y-%m-%d"), + #'date': time.strftime("%Y-%m-%d"), + 'date': obj.date, "account_id": cash_account_id, 'related_id': "clinic.hd.case,%s"%obj.id, 'ref': bill_no or obj.number or "", From a7569f3e6f3b1a81036506eb029b3588da6dfc82 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Tue, 12 Jan 2016 11:59:02 +0700 Subject: [PATCH 02/21] increase space of username --- netforce_clinic/reports/cust_invoice.odt | Bin 50702 -> 32778 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/netforce_clinic/reports/cust_invoice.odt b/netforce_clinic/reports/cust_invoice.odt index a9036b62d838126de5eaf44973d56819440131b5..7dbe853a1c9ce9644550fd8b3d739c4d6011dd8f 100644 GIT binary patch delta 18424 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 A4gdfE delta 36566 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 Date: Wed, 13 Jan 2016 11:57:24 +0700 Subject: [PATCH 03/21] improve utils --- netforce_clinic/models/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netforce_clinic/models/utils.py b/netforce_clinic/models/utils.py index b6eab78..e5d13f9 100644 --- a/netforce_clinic/models/utils.py +++ b/netforce_clinic/models/utils.py @@ -161,14 +161,14 @@ def num2word(n,l="th_TH"): word = sym[l][sign] + sym[l]['sep'] + base + sym[l]['sep'] + currency[l]['name'] + sym[l]['sep'] + currency[l]['end'] return word.strip() -def read_excel(fpath=None,show_datetime=False): +def read_excel(fpath=None,sheet_name="Sheet1",show_datetime=False): data={} if fpath: suffix=fpath.split(".")[-1] if suffix not in ('xls', 'xlsx'): raise Exception("ERROR : please should file xls or xlsx") wb=xlrd.open_workbook(fpath) - sheet=wb.sheet_by_name("Sheet1") + sheet=wb.sheet_by_name(sheet_name) keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)] data=[] for row_index in range(1, sheet.nrows): From 6177a247ad3b472d1db12f9a9845f7ba030598d2 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Wed, 13 Jan 2016 13:23:45 +0700 Subject: [PATCH 04/21] migrate hdcase number --- netforce_clinic/migrations/__init__.py | 3 +- .../migrations/reset_hdcase_number.py | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 netforce_clinic/migrations/reset_hdcase_number.py diff --git a/netforce_clinic/migrations/__init__.py b/netforce_clinic/migrations/__init__.py index 12c536e..2bc41ae 100644 --- a/netforce_clinic/migrations/__init__.py +++ b/netforce_clinic/migrations/__init__.py @@ -5,4 +5,5 @@ #from . import check_seq #from . import del_gi #from . import restore_picking -from . import rename_dbl_hdcase_number +#from . import rename_dbl_hdcase_number +from . import reset_hdcase_number diff --git a/netforce_clinic/migrations/reset_hdcase_number.py b/netforce_clinic/migrations/reset_hdcase_number.py new file mode 100644 index 0000000..0ff6366 --- /dev/null +++ b/netforce_clinic/migrations/reset_hdcase_number.py @@ -0,0 +1,29 @@ +import time + +from netforce.model import get_model +from netforce import migration +from netforce.access import set_active_user, set_active_company + +class Migration(migration.Migration): + _name="clinic.rename.dbl.hdcase.number" + _version="2.12.2" + + def migrate(self): + set_active_company(1) + set_active_user(1) + datenow=time.strftime("%Y-%m-%d") + dom=[ + ['date','>=',datenow], + ['date','<=',datenow], + ] + for hdcase in get_model("clinic.hd.case").search_browse(dom): + nums=hdcase.number.split("-") + if len(nums)==3 and len(nums[2])==6: + run=nums[2] + number='-'.join([nums[0],nums[1]+run[0:2],run[2:]]) + print('XXX', hdcase.number, ' --> ', number) + hdcase.write({ + 'number': number, + }) + +Migration.register() From b9a546e4ca3f64b1f4b3aec9fbcc1c6934696b74 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Wed, 13 Jan 2016 14:58:57 +0700 Subject: [PATCH 05/21] xxx --- netforce_clinic/migrations/reset_hdcase_number.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netforce_clinic/migrations/reset_hdcase_number.py b/netforce_clinic/migrations/reset_hdcase_number.py index 0ff6366..971e832 100644 --- a/netforce_clinic/migrations/reset_hdcase_number.py +++ b/netforce_clinic/migrations/reset_hdcase_number.py @@ -18,9 +18,9 @@ class Migration(migration.Migration): ] for hdcase in get_model("clinic.hd.case").search_browse(dom): nums=hdcase.number.split("-") - if len(nums)==3 and len(nums[2])==6: - run=nums[2] - number='-'.join([nums[0],nums[1]+run[0:2],run[2:]]) + if len(nums)==3 and len(nums[1])==4: + run=nums[1] + number='-'.join([nums[0],run[0:2],run[2:],nums[2]]) print('XXX', hdcase.number, ' --> ', number) hdcase.write({ 'number': number, From 038d10e771a0542f028884ae6bdb5b683cacb4a5 Mon Sep 17 00:00:00 2001 From: "watcha.h@almacom.co.th" Date: Tue, 19 Jan 2016 08:43:34 +0700 Subject: [PATCH 06/21] to_draft dlz --- netforce_clinic/layouts/clinic_dialyzer_form.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netforce_clinic/layouts/clinic_dialyzer_form.xml b/netforce_clinic/layouts/clinic_dialyzer_form.xml index 1c526c9..e47d6c8 100644 --- a/netforce_clinic/layouts/clinic_dialyzer_form.xml +++ b/netforce_clinic/layouts/clinic_dialyzer_form.xml @@ -3,7 +3,7 @@ From 65e960d21c934934d095c460a0c4524822185c3f Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Mon, 8 Feb 2016 15:50:05 +0700 Subject: [PATCH 07/21] prevent to put price to zero in case SSO --- netforce_clinic/models/hd_case.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 11d1fc5..d4532e9 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -1149,6 +1149,11 @@ class HDCase(Model): def done(self,ids,context={}): obj=self.browse(ids)[0] + if obj.patient_type_id.code=='SSO': + for line in obj.lines: + prod=line.product_id + if not line.price and prod: + raise Exception("Can not complete HDCase because price of product %s is missing!"%(prod.name)) count=0 for sline in obj.staffs: if sline.staff_id: From 02aa22a8444b7cc6061c73068e7dae4f88f334fe Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Mon, 8 Feb 2016 15:55:54 +0700 Subject: [PATCH 08/21] xxxx --- netforce_clinic/models/report_labor_cost_summary.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/netforce_clinic/models/report_labor_cost_summary.py b/netforce_clinic/models/report_labor_cost_summary.py index 971069c..1beb7f0 100644 --- a/netforce_clinic/models/report_labor_cost_summary.py +++ b/netforce_clinic/models/report_labor_cost_summary.py @@ -127,14 +127,12 @@ class ReportLaborCostSummary(Model): return r return "{0:,.0f}".format(r) total_hdcase=0 - print("----> ", dom) for line in get_model("clinic.labor.cost.line").search_browse(dom): lcost=line.labor_cost_id citem=lcost.cycle_item_id dpt=citem.department_id qty=line.qty or 0 total_hdcase+=qty - print("total_hdcase ", total_hdcase) amt=line.amount or 0 staff=line.staff_id categ_name='' From 4fa63302e187db275530681602a73f695f0ceec0 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Thu, 11 Feb 2016 14:07:42 +0700 Subject: [PATCH 09/21] should enter product if have fee charge --- netforce_clinic/layouts/clinic_hd_case_form.xml | 5 ++--- netforce_clinic/migrations/__init__.py | 2 +- netforce_clinic/models/hd_case.py | 14 +++++++++++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/netforce_clinic/layouts/clinic_hd_case_form.xml b/netforce_clinic/layouts/clinic_hd_case_form.xml index 6587a9b..6e361dd 100644 --- a/netforce_clinic/layouts/clinic_hd_case_form.xml +++ b/netforce_clinic/layouts/clinic_hd_case_form.xml @@ -64,7 +64,7 @@ - + @@ -100,9 +100,8 @@ - + - diff --git a/netforce_clinic/migrations/__init__.py b/netforce_clinic/migrations/__init__.py index 2bc41ae..3619ae7 100644 --- a/netforce_clinic/migrations/__init__.py +++ b/netforce_clinic/migrations/__init__.py @@ -6,4 +6,4 @@ #from . import del_gi #from . import restore_picking #from . import rename_dbl_hdcase_number -from . import reset_hdcase_number +#from . import reset_hdcase_number diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index d4532e9..9d4d1b5 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -1150,10 +1150,22 @@ class HDCase(Model): def done(self,ids,context={}): obj=self.browse(ids)[0] if obj.patient_type_id.code=='SSO': + cond1=False + cond2=False for line in obj.lines: prod=line.product_id + categ=line.product_categ_id + # force to enter unit price if not line.price and prod: - raise Exception("Can not complete HDCase because price of product %s is missing!"%(prod.name)) + raise Exception("Missing unit price for product [%s] %s!"%(prod.code,prod.name)) + elif not prod and categ.code=='EPO': + cond2=True + if categ.code=='FEE' and line.price: + cond1=True + # if fee and not enter product then hdcase should not finish + if cond1 and cond2: + raise Exception("%s is missing product"%(categ.name)) + count=0 for sline in obj.staffs: if sline.staff_id: From 1b79fdc1913597b2b2def55f8dcea3d62c368079 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Fri, 12 Feb 2016 11:33:30 +0700 Subject: [PATCH 10/21] prevent duplicate contact name --- netforce_clinic/migrations/__init__.py | 1 + .../migrations/remove_dbl_contact.py | 53 +++++++++++++++++++ netforce_clinic/models/partner.py | 6 +++ 3 files changed, 60 insertions(+) create mode 100644 netforce_clinic/migrations/remove_dbl_contact.py diff --git a/netforce_clinic/migrations/__init__.py b/netforce_clinic/migrations/__init__.py index 3619ae7..a5ef4b2 100644 --- a/netforce_clinic/migrations/__init__.py +++ b/netforce_clinic/migrations/__init__.py @@ -7,3 +7,4 @@ #from . import restore_picking #from . import rename_dbl_hdcase_number #from . import reset_hdcase_number +from . import remove_dbl_contact diff --git a/netforce_clinic/migrations/remove_dbl_contact.py b/netforce_clinic/migrations/remove_dbl_contact.py new file mode 100644 index 0000000..774851b --- /dev/null +++ b/netforce_clinic/migrations/remove_dbl_contact.py @@ -0,0 +1,53 @@ +from netforce.model import get_model +from netforce import migration +from netforce.access import set_active_user, set_active_company + +class Migration(migration.Migration): + _name="clinic.remove.dbl.contact" + _version="2.12.3" + + def migrate(self): + set_active_company(1) + set_active_user(1) + contacts={} + context={ + 'active_test': False, #find archive also + } + for partner in get_model("partner").search_browse([],context=context): + contacts.setdefault(partner.name,{'name': partner.name,'lines': []}) + contacts[partner.name]['lines'].append(partner.id) + cnames={} + for contact_name, vals in contacts.items(): + lines=vals['lines'] + if len(lines) > 1: + for contact_id in lines: + contact=get_model('partner').browse(contact_id) + if contact.is_patient: + res=get_model("clinic.patient").search([['partner_id','=',contact_id]]) + if not res: + try: + print(contact_name,' not use, will delete') + get_model('partner').delete([contact_id]) + except Exception as e: + print("Can not delete contact_id ", contact_id) + print("ERROR ", e) + else: + res=get_model("account.invoice").search_read([['partner_id','=',contact_id]],['number']) + if not res: + print(contact_name,' not use, will delete') + get_model('partner').delete([contact_id]) + else: + if contact_name not in cnames.keys(): + cnames[contact_name]=contact_id + else: + for r in res: + inv=get_model('account.invoice').browse(r['id']) + inv.write({ + 'partner_id': cnames[contact_name], + }) + get_model('partner').delete([contact_id]) + print("del ", contact_name) + print("#"*80) + + +Migration.register() diff --git a/netforce_clinic/models/partner.py b/netforce_clinic/models/partner.py index 5c7b9f8..4d8cf32 100644 --- a/netforce_clinic/models/partner.py +++ b/netforce_clinic/models/partner.py @@ -2,6 +2,8 @@ from netforce.model import Model, fields class Partner(Model): _inherit="partner" + #_key=["code","name"] + _key=["name"] _fields={ 'walkin_cust': fields.Boolean("Walkin Customer"), @@ -9,6 +11,10 @@ class Partner(Model): 'is_staff': fields.Boolean("Is Staff"), } + _sql_constraints=[ + ("contact_uniq","unique (name)","The name of contact must be unique!"), + ] + def name_get(self,ids,context={}): vals=[] for obj in self.browse(ids): From 078279f07abd93f61fdc16ed595b27e32023ec77 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Fri, 12 Feb 2016 13:07:42 +0700 Subject: [PATCH 11/21] allow to filter patient type on invoice --- .../layouts/clinic_cust_invoice_form.xml | 1 + .../layouts/clinic_cust_invoice_list.xml | 7 +++--- netforce_clinic/migrations/__init__.py | 1 + netforce_clinic/migrations/update_invoice.py | 22 +++++++++++++++++++ netforce_clinic/models/account_invoice.py | 10 +++++++-- 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 netforce_clinic/migrations/update_invoice.py diff --git a/netforce_clinic/layouts/clinic_cust_invoice_form.xml b/netforce_clinic/layouts/clinic_cust_invoice_form.xml index b0c7f41..3fce2e4 100644 --- a/netforce_clinic/layouts/clinic_cust_invoice_form.xml +++ b/netforce_clinic/layouts/clinic_cust_invoice_form.xml @@ -5,5 +5,6 @@ + diff --git a/netforce_clinic/layouts/clinic_cust_invoice_list.xml b/netforce_clinic/layouts/clinic_cust_invoice_list.xml index d911443..183bd38 100644 --- a/netforce_clinic/layouts/clinic_cust_invoice_list.xml +++ b/netforce_clinic/layouts/clinic_cust_invoice_list.xml @@ -1,5 +1,6 @@ - - - + + + + diff --git a/netforce_clinic/migrations/__init__.py b/netforce_clinic/migrations/__init__.py index a5ef4b2..7d09b35 100644 --- a/netforce_clinic/migrations/__init__.py +++ b/netforce_clinic/migrations/__init__.py @@ -8,3 +8,4 @@ #from . import rename_dbl_hdcase_number #from . import reset_hdcase_number from . import remove_dbl_contact +from . import update_invoice diff --git a/netforce_clinic/migrations/update_invoice.py b/netforce_clinic/migrations/update_invoice.py new file mode 100644 index 0000000..4dbf168 --- /dev/null +++ b/netforce_clinic/migrations/update_invoice.py @@ -0,0 +1,22 @@ +from netforce.model import get_model +from netforce import migration +from netforce.access import set_active_user, set_active_company +from netforce.database import get_connection + +class Migration(migration.Migration): + _name="clinic.update.invoice" + _version="2.12.4" + + def migrate(self): + set_active_company(1) + set_active_user(1) + db=get_connection() + for ptype_id in get_model("clinic.patient.type").search([]): + pids=get_model('clinic.patient').search([['type_id','=',ptype_id]]) + if pids: + db.execute(""" + update account_invoice set patient_type_id=%s where patient_id in %s + """,ptype_id,tuple(pids)) + print("update type %s to invoice -> Done"%(ptype_id)) + +Migration.register() diff --git a/netforce_clinic/models/account_invoice.py b/netforce_clinic/models/account_invoice.py index 0bb711a..37613aa 100644 --- a/netforce_clinic/models/account_invoice.py +++ b/netforce_clinic/models/account_invoice.py @@ -13,17 +13,23 @@ class AccountInvoice(Model): res={} for obj in self.browse(ids): pt_id=None + pt_type_id=None if obj.patient_partner_id: for pt in get_model('clinic.patient').search_browse([['partner_id','=',obj.patient_partner_id.id]]): pt_id=pt.id - res[obj.id]=pt_id + pt_type_id=pt.type_id.id + res[obj.id]={ + 'patient_id': pt_id, + 'patient_type_id': pt_type_id, + } return res _fields={ '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","Partner Patient",search=True), - 'patient_id': fields.Many2One("clinic.patient","Patient",function="_get_patient", store=True,search=True), + 'patient_id': fields.Many2One("clinic.patient","Patient",function="_get_patient", function_multi=True,store=True,search=True), + 'patient_type_id': fields.Many2One("clinic.patient.type","Patient Type",function="_get_patient", function_multi=True,store=True,search=True), } def _get_number(self,context={}): From 117685679ec320941f9b5975d1191975ca6a2632 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Mon, 15 Feb 2016 22:42:47 +0700 Subject: [PATCH 12/21] add option to auto generate hdcase line --- netforce_clinic/layouts/clinic_setting.xml | 3 ++- netforce_clinic/models/hd_case.py | 25 +++++++++++++++++++--- netforce_clinic/models/patient.py | 10 ++++----- netforce_clinic/models/setting.py | 1 + 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/netforce_clinic/layouts/clinic_setting.xml b/netforce_clinic/layouts/clinic_setting.xml index b683086..8fc130c 100644 --- a/netforce_clinic/layouts/clinic_setting.xml +++ b/netforce_clinic/layouts/clinic_setting.xml @@ -10,10 +10,11 @@ - + + diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 9d4d1b5..9fdcdbd 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -1448,6 +1448,26 @@ class HDCase(Model): st=get_model("clinic.setting").browse(1) if st.auto_gen: return vals + if st.get_old_expense: + for hdcase in patient.hd_cases: + for line in hdcase.lines: + line_vals={ + 'product_categ_id': line.product_categ_id.id, + 'product_id': line.product_id.id, + 'description': line.description, + 'reimbursable': line.reimbursable, + 'qty': line.qty, + 'uom_id': line.uom_id.id, + 'price': line.price, + 'amount': line.amount, + 'account_id': line.account_id.id, + 'ar_debit_id': line.ar_debit_id.id, + } + vals['lines'].append(('create',line_vals)) + break + if vals['lines']: + return vals + if not vals.get('lines'): vals['lines']=[] for st_prod in st.products: @@ -1483,12 +1503,11 @@ class HDCase(Model): #if not line_vals['account_id']: #raise Exception("Please contact accountant: product [%s] %s"%(prod.code, prod.name)) vals['lines'].append(('create',line_vals)) - # XXX need to get default partner=patient.type_id.contact_id if partner: vals['fee_partner_id']=partner.id - if not partner: - raise Exception("Not found contact %s at menu: Patiens -> Type"%patient.type_id.name) + else: + raise Exception("Missing contact in patiens type %s"%patient.type_id.name) return vals def get_invoice_policy(self,vals={},patient_id=None): diff --git a/netforce_clinic/models/patient.py b/netforce_clinic/models/patient.py index 643cf89..02d3038 100644 --- a/netforce_clinic/models/patient.py +++ b/netforce_clinic/models/patient.py @@ -314,10 +314,10 @@ class Patient(Model): 'type': 'shipping', 'partner_id': partner_id, 'patient_id': obj.id, - 'address': 'your address', - 'address2': 'your address2', - 'city': 'your city', - 'postal_code': 'your zip', + 'address': ' ', + 'address2': ' ', + 'city': ' ', + 'postal_code': ' ', 'country_id': 1, }) @@ -415,7 +415,7 @@ class Patient(Model): update_visit_pending(obj,visit_vals) # create partner if not found partner_id=obj.partner_id - if not partner_id: + if not partner_id and not vals.get('partner_id'): partner_name='%s %s'%(obj.first_name or "", obj.last_name or "") # XXX for partner in get_model("partner").search_browse([['name', '=', partner_name]]): if partner.name==obj.name: diff --git a/netforce_clinic/models/setting.py b/netforce_clinic/models/setting.py index 9a542d0..a20b6ec 100644 --- a/netforce_clinic/models/setting.py +++ b/netforce_clinic/models/setting.py @@ -66,6 +66,7 @@ class ClinicSetting(Model): 'product_categ_view': fields.Many2Many("product.categ","Product Category View"), 'hdcase_picking_auto': fields.Boolean("HDCase Auto Picking"), 'dlz_picking_auto': fields.Boolean("DLZ Auto Picking"), + 'get_old_expense': fields.Boolean("Get old expense"), } _defaults={ From 16676dcf4be0d5740a90d51e4e8bb1a2527784bc Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Tue, 16 Feb 2016 13:33:15 +0700 Subject: [PATCH 13/21] add seqeunce --- netforce_clinic/layouts/clinic_setting.xml | 1 + netforce_clinic/models/hd_case_line.py | 1 + netforce_clinic/models/setting_product.py | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/netforce_clinic/layouts/clinic_setting.xml b/netforce_clinic/layouts/clinic_setting.xml index 8fc130c..cdd4365 100644 --- a/netforce_clinic/layouts/clinic_setting.xml +++ b/netforce_clinic/layouts/clinic_setting.xml @@ -21,6 +21,7 @@ + diff --git a/netforce_clinic/models/hd_case_line.py b/netforce_clinic/models/hd_case_line.py index 6456b31..e4fe6e1 100644 --- a/netforce_clinic/models/hd_case_line.py +++ b/netforce_clinic/models/hd_case_line.py @@ -19,6 +19,7 @@ class Hdcaseline(Model): "ar_debit_id": fields.Many2One("account.account","Account Debit"), } + def _get_categ(self,context={}): categ_ids=get_model("product.categ").search([['code','=','EPO']]) if categ_ids: diff --git a/netforce_clinic/models/setting_product.py b/netforce_clinic/models/setting_product.py index 407fb14..3d147f2 100644 --- a/netforce_clinic/models/setting_product.py +++ b/netforce_clinic/models/setting_product.py @@ -22,6 +22,7 @@ class SettingProduct(Model): "ar_credit_id": fields.Many2One("account.account","AR Credit",multi_company=True), "ar_debit_id": fields.Many2One("account.account","AR Debit",multi_company=True), 'company_id': fields.Many2One("company","Company"), + 'sequence': fields.Char("Sequence"), } _defaults={ @@ -30,7 +31,7 @@ class SettingProduct(Model): 'reimbursable': 'no', } - _order="patient_type_id" + _order="patient_type_id,sequence" SettingProduct.register() From 765a9884edeb695b3b4ace0e6531ebb8b13f2899 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Thu, 18 Feb 2016 21:24:47 +0700 Subject: [PATCH 14/21] wrong summary total mecical for each round --- netforce_clinic/models/hd_case.py | 7 +++++++ netforce_clinic/models/report_cycle_item.py | 16 +++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 9fdcdbd..71228f2 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -111,6 +111,7 @@ class HDCase(Model): dlz_price=0 srv=0 mdc=0 + mdc_items={} for line in obj.lines: amt=line.amount or 0 prod=line.product_id @@ -129,8 +130,12 @@ class HDCase(Model): else: mdc+=amt mdc_names.append(prod_name or "") + mdc_items.setdefault(prod_name,0) + mdc_items[prod_name]=line.qty if categ.code=='EPO': epo_names.append(prod_name.title()) + mdc_items.setdefault(prod_name,0) + mdc_items[prod_name]=line.qty elif categ.code=='IVR': iron_names.append(prod_name.title()) elif categ.code=='FEE': @@ -154,6 +159,7 @@ class HDCase(Model): res[obj.id]={ 'epo': ','.join([n for n in epo_names]), 'mdc_name': ','.join([n for n in mdc_names]), + 'mdc_items': str(mdc_items), 'iron_name': ','.join([n for n in iron_names]), 'fee': fee, 'lab': lab, @@ -222,6 +228,7 @@ class HDCase(Model): "mdc": fields.Float("MDC",function="_get_expense",function_multi=True), "srv": fields.Float("Service",function="_get_expense",function_multi=True), "mdc_name": fields.Float("MDC Name",function="_get_expense",function_multi=True), + "mdc_items": fields.Float("MDC Items",function="_get_expense",function_multi=True), "iron_name": fields.Float("Iron Name",function="_get_expense",function_multi=True), 'sickbed_id': fields.Many2One("clinic.sickbed",'Sickbed'), "ref": fields.Char("Ref",search=True), diff --git a/netforce_clinic/models/report_cycle_item.py b/netforce_clinic/models/report_cycle_item.py index 3e030d1..ebf89a2 100644 --- a/netforce_clinic/models/report_cycle_item.py +++ b/netforce_clinic/models/report_cycle_item.py @@ -147,6 +147,7 @@ class ReportCycleItem(Model): total_epo=0 total_ivr=0 + for line in hdcase.lines: prod=line.product_id if prod.categ_id: @@ -171,6 +172,7 @@ class ReportCycleItem(Model): 'hdcase_number': reformat_number(hdcase.number), 'hdcase_id': hdcase.id, 'mdc_name': hdcase.mdc_name or hdcase.epo, + 'mdc_items': hdcase.mdc_items, 'iron_name': hdcase.iron_name or '', 'fee': abs(hdcase.fee), 'dlz_name': hdcase.dlz_name, @@ -224,12 +226,16 @@ class ReportCycleItem(Model): if x['cseq']==line['cseq'] and x['date']==date: sub_fee+=x['fee'] or 0 sub_mdc+=x['mdc'] or 0 - if not epos.get(x['mdc_name']): - epos[x['mdc_name']]=0 - if not epos.get(x['iron_name']): - epos[x['iron_name']]=0 + x_name=x['mdc_name'] + epos.setdefault(x_name,0) + epos.setdefault(x['iron_name'],0) epos[x['iron_name']]+=x['total_ivr'] or 0 #XXX - epos[x['mdc_name']]+=x['total_epo'] or 0 + if ',' in x_name: + del epos[x_name] + for k,v in eval(x['mdc_items']).items(): + epos[k]=v + else: + epos[x_name]+=x['total_epo'] or 0 count+=1 line['date_txt']=line['date'] line['cseq_txt']=line['cseq'] From 464470f2afee609f6065763dbd6948986b86f4e7 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Fri, 19 Feb 2016 08:58:32 +0700 Subject: [PATCH 15/21] if no reimburse medical stock should set to CASH --- netforce_clinic/models/report_medical_summary.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/netforce_clinic/models/report_medical_summary.py b/netforce_clinic/models/report_medical_summary.py index a11bd63..66bfd0e 100644 --- a/netforce_clinic/models/report_medical_summary.py +++ b/netforce_clinic/models/report_medical_summary.py @@ -93,6 +93,9 @@ class ReportMedicalSummary(Model): if ct_ids: dom.append(['categ_id.id','in',ct_ids]) categ_ids=set() + themself_id=0 + for type_id in get_model("clinic.patient.type").search([['code','=','CASH']]): + themself_id=type_id for prod in get_model("product").search_browse(dom): prod_code=prod.code or "" categ=prod.categ_id @@ -128,7 +131,10 @@ class ReportMedicalSummary(Model): continue if categ and categ.id not in list(categ_ids): continue - products[prod_code][patient_type_id]['qty']+=line.qty + if themself_id and patient_type_id!=themself_id and line.reimbursable=='no': + products[prod_code][themself_id]['qty']+=line.qty + else: + products[prod_code][patient_type_id]['qty']+=line.qty lines=[] limit_char=25 From b9f8fbdd4695955398287565e9b6086f2f158055 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Wed, 24 Feb 2016 17:49:42 +0700 Subject: [PATCH 16/21] pass branch_id to get the right number of GI --- netforce_clinic/layouts/clinic_prod_form.xml | 4 +-- netforce_clinic/migrations/__init__.py | 5 ++-- .../migrations/update_pick_out_number.py | 29 +++++++++++++++++++ netforce_clinic/models/hd_case.py | 3 +- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 netforce_clinic/migrations/update_pick_out_number.py diff --git a/netforce_clinic/layouts/clinic_prod_form.xml b/netforce_clinic/layouts/clinic_prod_form.xml index 01800df..9cc9294 100644 --- a/netforce_clinic/layouts/clinic_prod_form.xml +++ b/netforce_clinic/layouts/clinic_prod_form.xml @@ -14,8 +14,8 @@ - - + + diff --git a/netforce_clinic/migrations/__init__.py b/netforce_clinic/migrations/__init__.py index 7d09b35..ab2e437 100644 --- a/netforce_clinic/migrations/__init__.py +++ b/netforce_clinic/migrations/__init__.py @@ -7,5 +7,6 @@ #from . import restore_picking #from . import rename_dbl_hdcase_number #from . import reset_hdcase_number -from . import remove_dbl_contact -from . import update_invoice +#from . import remove_dbl_contact +#from . import update_invoice +from . import update_pick_out_number diff --git a/netforce_clinic/migrations/update_pick_out_number.py b/netforce_clinic/migrations/update_pick_out_number.py new file mode 100644 index 0000000..c954cea --- /dev/null +++ b/netforce_clinic/migrations/update_pick_out_number.py @@ -0,0 +1,29 @@ +from netforce.model import get_model +from netforce import migration +from netforce.access import set_active_user, set_active_company +from netforce.database import get_connection + +class Migration(migration.Migration): + _name="clinic.update.pick.out.number" + _version="2.12.5" + + def migrate(self): + set_active_company(1) + set_active_user(1) + db=get_connection() + count=0 + for pick in get_model('stock.picking').search_browse([]): + journal=pick.journal_id + sequence=journal.sequence_id + branch=sequence.branch_id + prefix=sequence.prefix + if prefix not in pick.number: + new_number=pick.number.replace(pick.number[0:6],prefix) + pick.write({ + 'number': new_number, + }) + count+=1 + print("update %s to %s"%(pick.number, new_number)) + print("total ", count) + +Migration.register() diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 71228f2..0c6b9f5 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -866,7 +866,8 @@ class HDCase(Model): context={ 'pick_type': 'out', 'journal_id': pick_vals['journal_id'], - 'date': obj.date + 'date': obj.date, + 'branch_id': obj.branch_id.id, } pick_id=picking_obj.create(pick_vals,context=context) pick=picking_obj.browse(pick_id) From 5b75d5fda00bbf080c32d290598008caf5fc4e0e Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Tue, 1 Mar 2016 11:08:44 +0700 Subject: [PATCH 17/21] include rd shop in report_medical summary/details --- .../models/report_medical_detail.py | 34 ++++++++++++++++--- .../models/report_medical_summary.py | 16 ++++++++- .../templates/report_medical_detail.hbs | 16 +++++---- .../templates/report_medical_summary.hbs | 2 +- 4 files changed, 55 insertions(+), 13 deletions(-) diff --git a/netforce_clinic/models/report_medical_detail.py b/netforce_clinic/models/report_medical_detail.py index c6f280b..45fbaf0 100644 --- a/netforce_clinic/models/report_medical_detail.py +++ b/netforce_clinic/models/report_medical_detail.py @@ -30,7 +30,7 @@ class ReportMedicalDetail(Model): date_from=defaults.get('date_from','%s-%s-01'%(year,month)) date_to=defaults.get('date_to',"%s-%s-%s"%(year,month,total_day)) categ_id=defaults.get('categ_id',None) - report_type=defaults.get('report_type',"completed") + report_type=defaults.get('report_type') or "completed" if not categ_id: categ_ids=get_model("product.categ").search([['code','=','MDC']]) if categ_ids: @@ -67,7 +67,6 @@ class ReportMedicalDetail(Model): 'product_id': product_id, 'report_type': report_type, } - print('report_type ', report_type) return res def get_report_data(self,ids,context={}): @@ -76,7 +75,6 @@ class ReportMedicalDetail(Model): defaults=self.default_get(context=context) time_start=defaults.get("date_from") time_stop=defaults.get("date_to") - prod_categ_id=defaults.get("prod_categ_id") branch_id=defaults.get("branch_id") department_id=defaults.get("department_id") product_id=defaults.get('product_id') @@ -84,7 +82,6 @@ class ReportMedicalDetail(Model): report_type=defaults.get('report_type','completed') if ids: obj=self.browse(ids)[0] - prod_categ_id=obj.prod_categ_id.id product_id=obj.product_id.id types=obj.types branch_id=obj.branch_id.id @@ -97,10 +94,16 @@ class ReportMedicalDetail(Model): ['hd_case_id.date','>=',time_start], ['hd_case_id.date','<=',time_stop], ] + shop_dom=[ + ['shop_id.date','>=',time_start], + ['shop_id.date','<=',time_stop], + ] if branch_id: dom.append(['hd_case_id.branch_id','=',branch_id]) + shop_dom.append(['shop_id.branch_id','=',branch_id]) if department_id: dom.append(['hd_case_id.department_id','=',department_id]) + shop_dom.append(['shop_id.department_id','=',department_id]) st=get_model("clinic.setting").browse(1) ct_ids=[] for categ in st.product_categ_view: @@ -137,6 +140,26 @@ class ReportMedicalDetail(Model): 'hname': hdcase.number, }) total_qty+=qty + + for line in get_model("clinic.shop.line").search_browse(shop_dom): + shop=line.shop_id + patient=shop.patient_id + department=shop.department_id + qty=line.qty or 0 + lines.append({ + 'date': shop.date or '', + 'tname': patient.type_id.name or '', + 'pname': patient.name or '', + 'qty': qty, + 'cname': 'RD Shop', + 'cseq': 999, + 'dpt_name': department.name, + 'hid': shop.id, + 'hname': shop.number, + 'is_shop': True, + }) + total_qty+=qty + sub_name='' if department_id: dpt=get_model("clinic.department").browse(department_id) @@ -146,8 +169,9 @@ class ReportMedicalDetail(Model): sub_name="(%s)" % branch.name or "" company_id=get_active_company() company=get_model("company").browse(company_id) + lines=sorted(lines,key=lambda x: (x['date'],x['cseq'])) no=1 - for line in sorted(lines,key=lambda x: (x['date'],x['cseq'])): + for line in lines: line['no']=no no+=1 data={ diff --git a/netforce_clinic/models/report_medical_summary.py b/netforce_clinic/models/report_medical_summary.py index 66bfd0e..dd30a9a 100644 --- a/netforce_clinic/models/report_medical_summary.py +++ b/netforce_clinic/models/report_medical_summary.py @@ -79,11 +79,16 @@ class ReportMedicalSummary(Model): time_start=obj.date_from time_stop=obj.date_to report_type=obj.report_type or "completed" - print('report_type ---> ', report_type) products={} patient_types={t['id']: t['name'] for t in get_model('clinic.patient.type').search_read([[]],['name'],order="name")} dom=[] + shop_dom=[ + ['date','>=',time_start], + ['date','<=',time_stop], + ['department_id','=',department_id], + ['branch_id','=',branch_id], + ] dom.append(['type','=','stock']) dom.append(['report_visible','=',True]) st=get_model("clinic.setting").browse(1) @@ -136,6 +141,15 @@ class ReportMedicalSummary(Model): else: products[prod_code][patient_type_id]['qty']+=line.qty + # add qty from rd shop + for shop in get_model("clinic.shop").search_browse(shop_dom): + for line in shop.lines: + prod=line.product_id + categ=line.categ_id + if categ and categ.id not in list(categ_ids): + continue + products[prod.code][themself_id]['qty']+=line.qty + lines=[] limit_char=25 titles=[{'name': 'ชื่อยา'}] diff --git a/netforce_clinic/templates/report_medical_detail.hbs b/netforce_clinic/templates/report_medical_detail.hbs index eae423d..74891ff 100644 --- a/netforce_clinic/templates/report_medical_detail.hbs +++ b/netforce_clinic/templates/report_medical_detail.hbs @@ -7,11 +7,11 @@ # - HDCase# Date + Cycle + Number Patient Type - Cycle Department Qty @@ -20,13 +20,17 @@ {{#each lines}} {{no}} - - {{view "link" string=hname action="clinic_hd_case" action_options="mode=form" active_id=hid}} - {{date}} + {{cname}} + + {{#if is_shop}} + {{view "link" string=hname action="clinic_shop" action_options="mode=form" active_id=hid}} + {{else}} + {{view "link" string=hname action="clinic_hd_case" action_options="mode=form" active_id=hid}} + {{/if}} + {{pname}} {{tname}} - {{cname}} {{dpt_name}} {{qty}} diff --git a/netforce_clinic/templates/report_medical_summary.hbs b/netforce_clinic/templates/report_medical_summary.hbs index b8ba80c..f1f751a 100644 --- a/netforce_clinic/templates/report_medical_summary.hbs +++ b/netforce_clinic/templates/report_medical_summary.hbs @@ -21,7 +21,7 @@ {{#each sub_lines}} - {{qty}} + {{qty}} {{/each}} From 421ec99363edaace7f9a1e5611df7a3323271f36 Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Tue, 8 Mar 2016 18:07:50 +0700 Subject: [PATCH 18/21] add action to create invoice payment --- .../actions/create_invoice_payment.xml | 6 + .../layouts/clinic_hdcase_payment_form.xml | 16 +++ .../layouts/clinic_import_payment_form.xml | 5 - .../layouts/clinic_payment_form.xml | 21 +-- .../layouts/create_invoice_payment_form.xml | 18 +++ netforce_clinic/layouts/payment_list.xml | 14 ++ netforce_clinic/models/__init__.py | 1 + netforce_clinic/models/account_invoice.py | 1 + netforce_clinic/models/account_payment.py | 2 +- .../models/create_invoice_payment.py | 131 ++++++++++++++++++ netforce_clinic/models/partner.py | 2 +- 11 files changed, 194 insertions(+), 23 deletions(-) create mode 100644 netforce_clinic/actions/create_invoice_payment.xml create mode 100644 netforce_clinic/layouts/clinic_hdcase_payment_form.xml delete mode 100644 netforce_clinic/layouts/clinic_import_payment_form.xml create mode 100644 netforce_clinic/layouts/create_invoice_payment_form.xml create mode 100644 netforce_clinic/layouts/payment_list.xml create mode 100644 netforce_clinic/models/create_invoice_payment.py diff --git a/netforce_clinic/actions/create_invoice_payment.xml b/netforce_clinic/actions/create_invoice_payment.xml new file mode 100644 index 0000000..fdc68e6 --- /dev/null +++ b/netforce_clinic/actions/create_invoice_payment.xml @@ -0,0 +1,6 @@ + + form_view + create.invoice.payment + create_invoice_payment_form + account_menu + diff --git a/netforce_clinic/layouts/clinic_hdcase_payment_form.xml b/netforce_clinic/layouts/clinic_hdcase_payment_form.xml new file mode 100644 index 0000000..398842b --- /dev/null +++ b/netforce_clinic/layouts/clinic_hdcase_payment_form.xml @@ -0,0 +1,16 @@ +
+ + + + + + + + + + +