From e51f94fd0bd706804a2de7637a4a6439b15257cd Mon Sep 17 00:00:00 2001 From: "watcha.h" Date: Mon, 6 Oct 2014 00:00:16 +0700 Subject: [PATCH] import data --- netforce_clinic/actions/clinic_board.xml | 2 +- .../layouts/clinic_import_payment_form.xml | 68 ++-- .../layouts/clinic_visit_calendar.xml | 2 +- netforce_clinic/layouts/clinic_visit_form.xml | 1 + netforce_clinic/models/:w | 317 +++++++++++++++ netforce_clinic/models/__init__.py | 3 + netforce_clinic/models/file_mg_sheet.py | 14 + netforce_clinic/models/file_nhso_sheet.py | 14 + netforce_clinic/models/file_sc_sheet.py | 14 + netforce_clinic/models/file_sheet.py | 1 + netforce_clinic/models/import_payment.py | 363 +++++++++++++++++- netforce_clinic/models/import_payment.py.old | 77 ++++ netforce_clinic/models/visit.py | 11 + netforce_clinic/todo.txt | 18 + 14 files changed, 877 insertions(+), 28 deletions(-) create mode 100644 netforce_clinic/models/:w create mode 100644 netforce_clinic/models/file_mg_sheet.py create mode 100644 netforce_clinic/models/file_nhso_sheet.py create mode 100644 netforce_clinic/models/file_sc_sheet.py create mode 100644 netforce_clinic/models/import_payment.py.old diff --git a/netforce_clinic/actions/clinic_board.xml b/netforce_clinic/actions/clinic_board.xml index cecee1f..4584279 100644 --- a/netforce_clinic/actions/clinic_board.xml +++ b/netforce_clinic/actions/clinic_board.xml @@ -1,6 +1,6 @@ clinic_board - Clinic Board + Visit Board board clinic_board clinic_menu diff --git a/netforce_clinic/layouts/clinic_import_payment_form.xml b/netforce_clinic/layouts/clinic_import_payment_form.xml index b6ba015..121467b 100644 --- a/netforce_clinic/layouts/clinic_import_payment_form.xml +++ b/netforce_clinic/layouts/clinic_import_payment_form.xml @@ -1,32 +1,56 @@ -
+ - - - - - diff --git a/netforce_clinic/models/:w b/netforce_clinic/models/:w new file mode 100644 index 0000000..014c5c7 --- /dev/null +++ b/netforce_clinic/models/:w @@ -0,0 +1,317 @@ +import re +import time +import xlrd +from datetime import datetime + +from netforce.model import Model, fields, get_model +from netforce.access import get_active_company +from netforce.access import get_active_user, set_active_user +from netforce.utils import get_file_path +from netforce.utils import get_data_path + +PAMENT_TYPE={ + "mg":"Medical Government", + "sc":"Social Security", + "nhso":"NHSO (30฿)", + "personal": "Personal", + "others": "Others", +} + +class ImportPayment(Model): + _name="clinic.import.payment" + _string="Import Payment" + + _fields={ + 'name': fields.Char("Name"), + "type": fields.Selection([("mg","Medical Government"),("sc","Social Security"),("nhso","NHSO (30฿)")],"Type"), + 'date_import': fields.DateTime("Date"), + 'file': fields.File("File"), + 'sheets': fields.One2Many("clinic.file.sheet","imp_id", "Sheets"), + 'mg_payment_id': fields.Many2One("account.payment","Payment"), + 'mg_move_id': fields.Many2One("account.move","Journal Entry"), + 'sc_payment_id': fields.Many2One("account.payment","Payment"), + 'sc_move_id': fields.Many2One("account.move","Journal Entry"), + 'nhso_payment_id': fields.Many2One("account.payment","Payment"), + 'nhso_move_id': fields.Many2One("account.move","Journal Entry"), + "state": fields.Selection([("draft","Draft"),("success","Succes"),("fail","Fail")],"Status"), + 'note': fields.Text("Note"), + } + + _order="date_import desc" + + def _get_name(self,context={}): + timenow=time.strftime("%Y-%m-%d") + return 'Import Payment - %s'%timenow + + _defaults={ + 'date_import': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"), + 'name': _get_name, + 'state': 'draft', + 'type': 'mg', + } + + def load_data(self,ids,context): + records=[1,2,] + del records[0] + fmt1="%y-%m-%d" + fmt2="%Y-%m-%d" + for record in records: + row=record.split(",") + doc_date=row[0] + if doc_date: + #'%m/%d/%y + pt="(\d+)/(\d+)/(\d+)" + res=re.search(pt,doc_date) + if res: + doc_date="%s-%s-%s" % (res.group(3),res.group(1),res.group(2)) + newdate=datetime.strptime(doc_date,fmt1) + print(newdate.strftime(fmt2)) + + def load_sheet(self,ids,context={}): + obj=self.browse(ids[0]) + fname=obj.file + if not fname: + raise Exception("Please select file!") + fpath=get_file_path(fname) + suffix=fpath.split(".")[-1] + if suffix not in ('xls', 'xlsx'): + raise Exception("ERROR : file support only xls, xlsx") + + wb=xlrd.open_workbook(fpath) + sheets=wb.sheet_names() + index=0 + # XXX clear old sheet + for sheet in obj.sheets: + sheet.delete() + + vals={ + 'sheets': [], + } + + for sheet in sheets: + line={ + 'index': index, + 'name': sheet, + } + vals["sheets"].append(("create",line)) + #vals['state']='sheet_loaded' + obj.write(vals) + return { + 'next': { + 'name': "clinic_import_payment", + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Load sheet successfully", + } + + def onchange_sheet(self,context={}): + data=context["data"] + path=context["path"] + line=get_data_path(data,path,parent=True) + for sheet in data['sheets']: + if sheet['name']!=line['name']: + sheet['select']=None + return data + + def onchange_file(self,context={}): + data=context['data'] + data['sheets']=[] + print("data ", data) + return data + + def clear_sheet(self,ids,context={}): + obj=self.browse(ids)[0] + for sheet in obj.sheets: + sheet.delete() + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Clear Sheet OK", + } + + def find_invoice(self,ids,context={}): + # return invoice line + obj=self.browse(ids[0]) + partner_id=None + setting=get_model("clinic.setting").browse(1) + if obj.type=='sc': + partner_id=setting.sc_partner_id.id + elif obj.type=='mg': + partner_id=setting.mg_partner_id.id + elif obj.type=='nhso': + partner_id=setting.nhso_partner_id.id + if not partner_id: + raise Exception("No partner") + + # XXX + if obj.payment_lines: + for line in obj.payment_lines: + line.delete() + dom=[] + dom.append(['state','=','waiting_payment']) + dom.append(['partner_id','=',partner_id]) + invoice_lines=[] + for invoice in get_model("account.invoice").search_browse(dom): + line={ + 'invoice_id': invoice.id, + 'amount': invoice.amount_total, + } + #invoice_lines.append(('create',line)) + invoice_lines.append(('create',line)) + return invoice_lines + + def make_payment(self,ids,context={}): + obj=self.browse(ids[0]) + company_id=get_active_company() + timenow=time.strftime("%Y-%m-%d") + setting=get_model("clinic.setting").browse(1) + account_id=None + partner_id=None + if obj.type=='sc': + account_id=setting.ar_sc_id.id + partner_id=setting.sc_partner_id.id + elif obj.type=='mg': + account_id=setting.ar_mg_id.id + partner_id=setting.mg_partner_id.id + elif obj.type=='nhso': + account_id=setting.ar_nhso_id.id + partner_id=setting.nhso_partner_id.id + vals={ + "partner_id": partner_id, + "company_id": company_id, + "type": "in", + "pay_type": "invoice", + "date": timenow, + "account_id": account_id, + 'lines': [], # TODO find invoice matching + } + if obj.type=='sc': + if not obj.sc_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'sc_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + print("="*30) + for line in invoice_lines: + print(line) + print("="*30) + # TODO update payment + # remove invoice, udpate invoice + if invoice_lines: + # clear old invoice lines + for line in obj.sc_payment_id.invoice_lines: + line.delete() + # update new + obj.sc_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + elif obj.type=='mg': + if not obj.mg_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'mg_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + print("="*30) + for line in invoice_lines: + print(line) + print("="*30) + if invoice_lines: + # clear old invoice lines + for line in obj.mg_payment_id.invoice_lines: + line.delete() + # update new + obj.mg_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + elif obj.type=='nhso': + if not obj.nhso_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'nhso_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + if invoice_lines: + # clear old invoice lines + for line in obj.nhso_payment_id.invoice_lines: + line.delete() + # update new + obj.nhso_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + + def import_payment(self,ids,context={}): + obj=self.browse(ids)[0] + obj.make_payment() + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': 'Import Payment OK', + } + + def post_mg(self,ids,context={}): + pass + + def undo_mg(self,ids,context={}): + pass + + def post_sc(self,ids,context={}): + obj=self.browse(ids)[0] + payment_id=obj.sc_payment_id + #move_id=obj.sc_move_id + if not payment_id: + raise Exception("Payment not create yet.") + # XXX check state + if payment_id.state=='posted': + raise Exception("%s has been posted."%payment_id.number) + payment_id.post() + print("move_id ", payment_id.move_id.id) + obj.write({ + 'sc_move_id': payment_id.move_id.id, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "%s has been posted"%payment_id.number, + } + + + def undo_sc(self,ids,context={}): + obj=self.browse(ids)[0] + move_id=obj.sc_move_id + payment_id=obj.sc_payment_id + if not move_id: + raise Exception("%s is not post yet"%payment_id.number) + payment_id.to_draft() + obj.write({ + #'sc_payment_id': None, + 'sc_move_id': None, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Undo OK", + } + + def post_nhso(self,ids,context={}): + pass + + def undo_nhso(self,ids,context={}): + pass + + +ImportPayment.register() diff --git a/netforce_clinic/models/__init__.py b/netforce_clinic/models/__init__.py index 352a95e..716fe3c 100644 --- a/netforce_clinic/models/__init__.py +++ b/netforce_clinic/models/__init__.py @@ -22,6 +22,9 @@ from . import cause_chronic from . import je from . import input_line from . import file_sheet +from . import file_nhso_sheet +from . import file_sc_sheet +from . import file_mg_sheet from . import payment from . import import_payment from . import visit_plan diff --git a/netforce_clinic/models/file_mg_sheet.py b/netforce_clinic/models/file_mg_sheet.py new file mode 100644 index 0000000..fee33cc --- /dev/null +++ b/netforce_clinic/models/file_mg_sheet.py @@ -0,0 +1,14 @@ +from netforce.model import Model, fields + +class FileMGSheet(Model): + _name="clinic.file.mg.sheet" + _string="File Sheet" + + _fields={ + 'name': fields.Char("Name"), + 'index': fields.Integer("Index"), + "select": fields.Selection([("yes","Yes"),("no","No")],"Select"), + 'imp_id': fields.Many2One("clinic.import.payment","Import Payment"), + } + +FileMGSheet.register() diff --git a/netforce_clinic/models/file_nhso_sheet.py b/netforce_clinic/models/file_nhso_sheet.py new file mode 100644 index 0000000..c25f7d5 --- /dev/null +++ b/netforce_clinic/models/file_nhso_sheet.py @@ -0,0 +1,14 @@ +from netforce.model import Model, fields + +class FileNHSOSheet(Model): + _name="clinic.file.nhso.sheet" + _string="File Sheet" + + _fields={ + 'name': fields.Char("Name"), + 'index': fields.Integer("Index"), + "select": fields.Selection([("yes","Yes"),("no","No")],"Select"), + 'imp_id': fields.Many2One("clinic.import.payment","Import Payment"), + } + +FileNHSOSheet.register() diff --git a/netforce_clinic/models/file_sc_sheet.py b/netforce_clinic/models/file_sc_sheet.py new file mode 100644 index 0000000..89b6742 --- /dev/null +++ b/netforce_clinic/models/file_sc_sheet.py @@ -0,0 +1,14 @@ +from netforce.model import Model, fields + +class FileSCSheet(Model): + _name="clinic.file.sc.sheet" + _string="File Sheet" + + _fields={ + 'name': fields.Char("Name"), + 'index': fields.Integer("Index"), + "select": fields.Selection([("yes","Yes"),("no","No")],"Select"), + 'imp_id': fields.Many2One("clinic.import.payment","Import Payment"), + } + +FileSCSheet.register() diff --git a/netforce_clinic/models/file_sheet.py b/netforce_clinic/models/file_sheet.py index cdf814c..a7ecd8a 100644 --- a/netforce_clinic/models/file_sheet.py +++ b/netforce_clinic/models/file_sheet.py @@ -9,6 +9,7 @@ class FileSheet(Model): 'index': fields.Integer("Index"), "select": fields.Selection([("yes","Yes"),("no","No")],"Select"), 'je_id': fields.Many2One("clinic.je","Journal Entry"), + 'imp_id': fields.Many2One("clinic.import.payment","Import Payment"), } FileSheet.register() diff --git a/netforce_clinic/models/import_payment.py b/netforce_clinic/models/import_payment.py index bebf3df..aa59b96 100644 --- a/netforce_clinic/models/import_payment.py +++ b/netforce_clinic/models/import_payment.py @@ -1,3 +1,4 @@ +import re import time import xlrd from datetime import datetime @@ -7,6 +8,7 @@ from netforce.access import get_active_company from netforce.access import get_active_user, set_active_user from netforce.utils import get_file_path from netforce.utils import get_data_path +from netforce.database import get_connection PAMENT_TYPE={ "mg":"Medical Government", @@ -22,14 +24,17 @@ class ImportPayment(Model): _fields={ 'name': fields.Char("Name"), + "type": fields.Selection([("mg","Medical Government"),("sc","Social Security"),("nhso","NHSO (30฿)")],"Type"), 'date_import': fields.DateTime("Date"), - 'mg_file': fields.File("File"), - 'sc_file': fields.File("File"), - 'nhso_file': fields.File("File"), + 'file': fields.File("File"), + 'sheets': fields.One2Many("clinic.file.sheet","imp_id", "Sheets"), 'mg_payment_id': fields.Many2One("account.payment","Payment"), + 'mg_move_id': fields.Many2One("account.move","Journal Entry"), 'sc_payment_id': fields.Many2One("account.payment","Payment"), + 'sc_move_id': fields.Many2One("account.move","Journal Entry"), 'nhso_payment_id': fields.Many2One("account.payment","Payment"), - "state": fields.Selection([("draft","Draft"),("success","Succes"),("fail","Fail")],"Status"), + 'nhso_move_id': fields.Many2One("account.move","Journal Entry"), + "state": fields.Selection([("draft","Draft"),("success","Succes"),("fail","Fail"),('close','Close')],"Status"), 'note': fields.Text("Note"), } @@ -43,6 +48,356 @@ class ImportPayment(Model): 'date_import': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"), 'name': _get_name, 'state': 'draft', + 'type': 'mg', } + + def load_data(self,ids,context): + records=[1,2,] + del records[0] + fmt1="%y-%m-%d" + fmt2="%Y-%m-%d" + for record in records: + row=record.split(",") + doc_date=row[0] + if doc_date: + #'%m/%d/%y + pt="(\d+)/(\d+)/(\d+)" + res=re.search(pt,doc_date) + if res: + doc_date="%s-%s-%s" % (res.group(3),res.group(1),res.group(2)) + newdate=datetime.strptime(doc_date,fmt1) + print(newdate.strftime(fmt2)) + + def load_sheet(self,ids,context={}): + obj=self.browse(ids[0]) + fname=obj.file + if not fname: + raise Exception("Please select file!") + fpath=get_file_path(fname) + suffix=fpath.split(".")[-1] + if suffix not in ('xls', 'xlsx'): + raise Exception("ERROR : file support only xls, xlsx") + + wb=xlrd.open_workbook(fpath) + sheets=wb.sheet_names() + index=0 + # XXX clear old sheet + for sheet in obj.sheets: + sheet.delete() + + vals={ + 'sheets': [], + } + + for sheet in sheets: + line={ + 'index': index, + 'name': sheet, + } + vals["sheets"].append(("create",line)) + #vals['state']='sheet_loaded' + obj.write(vals) + return { + 'next': { + 'name': "clinic_import_payment", + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Load sheet successfully", + } + + def onchange_sheet(self,context={}): + data=context["data"] + path=context["path"] + line=get_data_path(data,path,parent=True) + for sheet in data['sheets']: + if sheet['name']!=line['name']: + sheet['select']=None + return data + + def onchange_file(self,context={}): + data=context['data'] + data['sheets']=[] + print("data ", data) + return data + + def clear_sheet(self,ids,context={}): + obj=self.browse(ids)[0] + for sheet in obj.sheets: + sheet.delete() + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Clear Sheet OK", + } + + def find_invoice(self,ids,context={}): + # return invoice line + obj=self.browse(ids[0]) + partner_id=None + setting=get_model("clinic.setting").browse(1) + if obj.type=='sc': + partner_id=setting.sc_partner_id.id + elif obj.type=='mg': + partner_id=setting.mg_partner_id.id + elif obj.type=='nhso': + partner_id=setting.nhso_partner_id.id + if not partner_id: + raise Exception("No partner") + + # XXX + if obj.payment_lines: + for line in obj.payment_lines: + line.delete() + dom=[] + dom.append(['state','=','waiting_payment']) + dom.append(['partner_id','=',partner_id]) + invoice_lines=[] + for invoice in get_model("account.invoice").search_browse(dom): + line={ + 'invoice_id': invoice.id, + 'amount': invoice.amount_total, + } + #invoice_lines.append(('create',line)) + invoice_lines.append(('create',line)) + return invoice_lines + + def make_payment(self,ids,context={}): + obj=self.browse(ids[0]) + company_id=get_active_company() + timenow=time.strftime("%Y-%m-%d") + setting=get_model("clinic.setting").browse(1) + account_id=None + partner_id=None + if obj.type=='sc': + account_id=setting.ar_sc_id.id + partner_id=setting.sc_partner_id.id + elif obj.type=='mg': + account_id=setting.ar_mg_id.id + partner_id=setting.mg_partner_id.id + elif obj.type=='nhso': + account_id=setting.ar_nhso_id.id + partner_id=setting.nhso_partner_id.id + vals={ + "partner_id": partner_id, + "company_id": company_id, + "type": "in", + "pay_type": "invoice", + "date": timenow, + "account_id": account_id, + 'lines': [], # TODO find invoice matching + } + if obj.type=='sc': + if not obj.sc_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'sc_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + print("="*30) + for line in invoice_lines: + print(line) + print("="*30) + # TODO update payment + # remove invoice, udpate invoice + if invoice_lines: + # clear old invoice lines + for line in obj.sc_payment_id.invoice_lines: + line.delete() + # update new + obj.sc_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + elif obj.type=='mg': + if not obj.mg_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'mg_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + print("="*30) + for line in invoice_lines: + print(line) + print("="*30) + if invoice_lines: + # clear old invoice lines + for line in obj.mg_payment_id.invoice_lines: + line.delete() + # update new + obj.mg_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + elif obj.type=='nhso': + if not obj.nhso_payment_id: + payment_id=get_model("account.payment").create(vals,context={'type': 'in'}) + obj.write({ + 'nhso_payment_id': payment_id, + }) + invoice_lines=obj.find_invoice() + if invoice_lines: + # clear old invoice lines + for line in obj.nhso_payment_id.invoice_lines: + line.delete() + # update new + obj.nhso_payment_id.write({ + 'invoice_lines': invoice_lines, + }) + + def import_payment(self,ids,context={}): + obj=self.browse(ids)[0] + obj.make_payment() + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': 'Import Payment OK', + } + + def post_mg(self,ids,context={}): + obj=self.browse(ids)[0] + payment_id=obj.mg_payment_id + if not payment_id: + raise Exception("Payment not create yet.") + if payment_id.state=='posted': + raise Exception("%s has been posted."%payment_id.number) + payment_id.post() + # XXX + db=get_connection() + res=db.query("select move_id from account_payment where id =%s"%payment_id.id) + if res: + move_id=res[0]['move_id'] + obj.write({ + 'mg_move_id': move_id, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "%s has been posted"%payment_id.number, + } + pass + + def undo_mg(self,ids,context={}): + obj=self.browse(ids)[0] + move_id=obj.mg_move_id + payment_id=obj.mg_payment_id + if not move_id: + raise Exception("%s is not post yet"%payment_id.number) + payment_id.to_draft() + obj.write({ + 'mg_move_id': None, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Undo OK", + } + + pass + + def post_sc(self,ids,context={}): + obj=self.browse(ids)[0] + payment_id=obj.sc_payment_id + if not payment_id: + raise Exception("Payment not create yet.") + if payment_id.state=='posted': + raise Exception("%s has been posted."%payment_id.number) + payment_id.post() + # XXX + db=get_connection() + res=db.query("select move_id from account_payment where id =%s"%payment_id.id) + if res: + move_id=res[0]['move_id'] + obj.write({ + 'sc_move_id': move_id, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "%s has been posted"%payment_id.number, + } + + + def undo_sc(self,ids,context={}): + obj=self.browse(ids)[0] + move_id=obj.sc_move_id + payment_id=obj.sc_payment_id + if not move_id: + raise Exception("%s is not post yet"%payment_id.number) + payment_id.to_draft() + obj.write({ + 'sc_move_id': None, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Undo OK", + } + + def post_nhso(self,ids,context={}): + obj=self.browse(ids)[0] + payment_id=obj.nhso_payment_id + if not payment_id: + raise Exception("Payment not create yet.") + if payment_id.state=='posted': + raise Exception("%s has been posted."%payment_id.number) + payment_id.post() + # XXX + db=get_connection() + res=db.query("select move_id from account_payment where id =%s"%payment_id.id) + if res: + move_id=res[0]['move_id'] + obj.write({ + 'nhso_move_id': move_id, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "%s has been posted"%payment_id.number, + } + pass + + def undo_nhso(self,ids,context={}): + obj=self.browse(ids)[0] + move_id=obj.nhso_move_id + payment_id=obj.nhso_payment_id + if not move_id: + raise Exception("%s is not post yet"%payment_id.number) + payment_id.to_draft() + obj.write({ + 'nhso_move_id': None, + }) + return { + 'next': { + 'name': 'clinic_import_payment', + 'mode': 'form', + 'active_id': obj.id, + }, + 'flash': "Undo OK", + } + pass + + def close(self,ids,context={}): + obj=self.browse(ids)[0] + obj.write({'state': 'close'}) ImportPayment.register() diff --git a/netforce_clinic/models/import_payment.py.old b/netforce_clinic/models/import_payment.py.old new file mode 100644 index 0000000..5988ff7 --- /dev/null +++ b/netforce_clinic/models/import_payment.py.old @@ -0,0 +1,77 @@ +import re +import time +import xlrd +from datetime import datetime + +from netforce.model import Model, fields, get_model +from netforce.access import get_active_company +from netforce.access import get_active_user, set_active_user +from netforce.utils import get_file_path +from netforce.utils import get_data_path + +PAMENT_TYPE={ + "mg":"Medical Government", + "sc":"Social Security", + "nhso":"NHSO (30฿)", + "personal": "Personal", + "others": "Others", +} + +class ImportPayment(Model): + _name="clinic.import.payment" + _string="Import Payment" + + _fields={ + 'name': fields.Char("Name"), + 'date_import': fields.DateTime("Date"), + + 'mg_file': fields.File("File"), + 'mg_payment_id': fields.Many2One("account.payment","Payment"), + 'mg_move_id': fields.Many2One("account.move","Journal Entry"), + 'mg_sheets': fields.One2Many("clinic.file.mg.sheet","imp_id", "Sheets"), + + 'sc_file': fields.File("File"), + 'sc_payment_id': fields.Many2One("account.payment","Payment"), + 'sc_move_id': fields.Many2One("account.move","Journal Entry"), + 'sc_sheets': fields.One2Many("clinic.file.sc.sheet","imp_id", "Sheets"), + + 'nhso_file': fields.File("File"), + 'nhso_payment_id': fields.Many2One("account.payment","Payment"), + 'nhso_move_id': fields.Many2One("account.move","Journal Entry"), + 'nhso_sheets': fields.One2Many("clinic.file.nhso.sheet","imp_id", "Sheets"), + + "state": fields.Selection([("draft","Draft"),("success","Succes"),("fail","Fail")],"Status"), + 'note': fields.Text("Note"), + } + + _order="date_import desc" + + def _get_name(self,context={}): + timenow=time.strftime("%Y-%m-%d") + return 'Import Payment - %s'%timenow + + _defaults={ + 'date_import': lambda *a: time.strftime("%Y-%m-%d %H:%M:%S"), + 'name': _get_name, + 'state': 'draft', + } + + def load_data(self,ids,context): + records=[1,2,] + del records[0] + fmt1="%y-%m-%d" + fmt2="%Y-%m-%d" + for record in records: + row=record.split(",") + doc_date=row[0] + if doc_date: + #'%m/%d/%y + pt="(\d+)/(\d+)/(\d+)" + res=re.search(pt,doc_date) + if res: + doc_date="%s-%s-%s" % (res.group(3),res.group(1),res.group(2)) + newdate=datetime.strptime(doc_date,fmt1) + print(newdate.strftime(fmt2)) + + +ImportPayment.register() diff --git a/netforce_clinic/models/visit.py b/netforce_clinic/models/visit.py index 8258eab..874c0cb 100644 --- a/netforce_clinic/models/visit.py +++ b/netforce_clinic/models/visit.py @@ -315,6 +315,8 @@ class Visit(Model): timevisit=timenow # XXX timevisit=data['time_start'][11:20] + if not timevisit: + timevisit=timenow fmt_date="%Y-%m-%d %H:%M:%S" fix_hrs=data['time_use'] or 0 time_start=datetime.datetime.strptime("%s %s"%(start_date,timevisit),fmt_date) @@ -326,5 +328,14 @@ class Visit(Model): line['state']='open' return data + + def create_dialyzer(self,ids,context={}): + return { + 'next': { + 'name': 'clinic_dialyzer', + 'mode': 'form', + }, + } + Visit.register() diff --git a/netforce_clinic/todo.txt b/netforce_clinic/todo.txt index 9f71f9c..57e25dd 100644 --- a/netforce_clinic/todo.txt +++ b/netforce_clinic/todo.txt @@ -1,4 +1,22 @@ ====== + !!! this night + - import payment + + patient + - type + -nhso สปสช + - center office of healthcare information + - sc ประักนสังคม + - mg + + task + 1. find invoice + 2. match invoice + - date, number for patient (HN) + 3. if have invoice create payment if not review input data again + 4. post payment to journal + +=========================== - main - create journal entry from file import - detail (if have some time need to approve)