diff --git a/netforce_clinic/layouts/clinic_cycle_item_form.xml b/netforce_clinic/layouts/clinic_cycle_item_form.xml
index 01aa6ed..e3339a1 100644
--- a/netforce_clinic/layouts/clinic_cycle_item_form.xml
+++ b/netforce_clinic/layouts/clinic_cycle_item_form.xml
@@ -3,6 +3,8 @@
@@ -10,13 +12,12 @@
-
-
-
-
-
+
+
+
+
@@ -24,6 +25,8 @@
+
+
diff --git a/netforce_clinic/layouts/clinic_cycle_item_list.xml b/netforce_clinic/layouts/clinic_cycle_item_list.xml
index f17931f..5fe3cd9 100644
--- a/netforce_clinic/layouts/clinic_cycle_item_list.xml
+++ b/netforce_clinic/layouts/clinic_cycle_item_list.xml
@@ -1,6 +1,8 @@
-
-
+
+
+
+
diff --git a/netforce_clinic/layouts/fin_clinic_settings.xml b/netforce_clinic/layouts/fin_clinic_settings.xml
index 0eb1044..d7f39ad 100644
--- a/netforce_clinic/layouts/fin_clinic_settings.xml
+++ b/netforce_clinic/layouts/fin_clinic_settings.xml
@@ -7,5 +7,7 @@
+
+
diff --git a/netforce_clinic/models/cycle_item.py b/netforce_clinic/models/cycle_item.py
index 000e716..e923811 100644
--- a/netforce_clinic/models/cycle_item.py
+++ b/netforce_clinic/models/cycle_item.py
@@ -2,14 +2,17 @@ import time
from netforce.model import Model, fields, get_model
from netforce.access import get_active_company
+from netforce.utils import get_data_path
class CycleItem(Model):
_name="clinic.cycle.item"
_string="Cycle Item"
+ _name_field="name"
def _get_all(self,ids,context):
res={}
for obj in self.browse(ids):
+ name="%s-%s"%(obj.cycle_id.name,obj.date)
hd_total=len([hd_case for hd_case in obj.hd_cases if hd_case.state=='completed']) # XXX
pt=(hd_total or 0.0)
k=(obj.var_k or 0.0)
@@ -19,14 +22,17 @@ class CycleItem(Model):
for line in obj.lines:
total+=line.amount
res[obj.id]={
+ 'name': name,
'var_x': x,
'total_pt': hd_total,
'total_amount': hd_total*k,
'total': total,
+ 'total_balance': (hd_total*k)-total,
}
return res
_fields={
+ 'name': fields.Char("Name", function="_get_all",function_multi=True), # need to field related in journal
'company_id': fields.Many2One("company", "Company"),
'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True),
'date': fields.Date("Date",search=True),
@@ -34,6 +40,7 @@ class CycleItem(Model):
'var_x': fields.Float("X", function="_get_all",function_multi=True),
'total_pt': fields.Float("PT", function="_get_all",function_multi=True),
'total_amount': fields.Float("PT*K", function="_get_all",function_multi=True),
+ 'total_balance': fields.Float("Total Balance", function="_get_all",function_multi=True),
'total': fields.Float("Total", function="_get_all",function_multi=True),
"state": fields.Selection([("draft","Draft"),("done","Done")],"Status",required=True),
'hd_cases': fields.One2Many("clinic.hd.case","cycle_item_id", "HD Cases"),
@@ -92,5 +99,94 @@ class CycleItem(Model):
},
'flash': 'Compute OK',
}
+
+ def onchange_line(self,context={}):
+ data=context['data']
+ path=context["path"]
+ line=get_data_path(data,path,parent=True)
+ #qty=line.get("qty")
+ #rate=line.get("rate")
+ total=0.0
+ for line in data['lines']:
+ line['amount']=(line['qty'] or 0) * (line['rate'] or 0.0)
+ total+=line['amount']
+ print(line)
+ data['total']=total
+ data['total_amount']=data['total_pt']*(data['var_k'] or 0)
+ data['total_balance']=data['total_amount']-data['total']
+ return data
+
+ def create_journal(self,ids,context={}):
+ obj=self.browse(ids)[0]
+ settings=get_model("settings").browse(1)
+ account_id=settings.ap_nurse_id.id
+ if not account_id:
+ raise Exception("No Account payment for nurse")
+ vals={
+ "company_id": obj.company_id.id,
+ "type": "in",
+ "pay_type": "direct",
+ #"date": time.strftime("%Y-%m-%d"),
+ "date": obj.date or time.strftime("%Y-%m-%d"),
+ "account_id": account_id,
+ 'related_id': "clinic.cycle.item,%s"%obj.id,
+ 'direct_lines': [],
+ }
+ for line in obj.lines:
+ if not line.amount:
+ continue
+ vals['direct_lines'].append(('create',{
+ 'description': 'Payment; %s'%line.nurse_categ.name,
+ 'account_id': account_id,
+ 'qty': 1,
+ 'unit_price': line.amount,
+ 'amount': line.amount,
+ }))
+ payment_id=get_model("account.payment").create(vals,context={"type":"in"})
+ get_model("account.payment").browse(payment_id).post()
+ obj.write({
+ 'state': 'done',
+ })
+ return {
+ 'next': {
+ 'name': 'payment',
+ 'mode': 'form',
+ 'active_id': payment_id,
+ },
+ 'flash': 'Create journal successfully',
+ }
+
+ def to_draft(self,ids,context={}):
+ obj=self.browse(ids)[0]
+ related_id="clinic.cycle.item,%s"%obj.id
+ for payment in get_model("account.payment").search_browse([['related_id','=',related_id]]):
+ payment.to_draft()
+ payment.delete()
+ obj.write({
+ 'state': 'draft',
+ })
+ return {
+ 'next': {
+ 'name': 'clinic_cycle_item',
+ 'mode': 'form',
+ 'active_id': obj.id,
+ },
+ 'flash': 'Cycle item is set to draft',
+ }
+
+ def view_journal(self,ids,context={}):
+ obj=self.browse(ids)[0]
+ related_id="clinic.cycle.item,%s"%obj.id
+ payment_ids=get_model("account.payment").search([['related_id','=',related_id]])
+ if payment_ids:
+ payment_id=payment_ids[0]
+ return {
+ 'next': {
+ 'name': 'payment',
+ 'mode': 'form',
+ 'active_id': payment_id,
+ },
+ }
+
CycleItem.register()
diff --git a/netforce_clinic/models/fin_setting.py b/netforce_clinic/models/fin_setting.py
index f9bebba..bc2e4da 100644
--- a/netforce_clinic/models/fin_setting.py
+++ b/netforce_clinic/models/fin_setting.py
@@ -9,6 +9,8 @@ class Settings(Model):
"ar_mg_id": fields.Many2One("account.account","Account Recieve Medical Government"),
"ar_nhso_id": fields.Many2One("account.account","Account Recieve NHSO 30B"),
"ar_sc_id": fields.Many2One("account.account","Account Recieve Social Security"),
+ "ap_nurse_id": fields.Many2One("account.account","Account Payment Nurse"),
+ "ap_doctor_id": fields.Many2One("account.account","Account Doctor Nurse"),
}
Settings.register()
diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py
index 81994d7..1efc3ac 100644
--- a/netforce_clinic/models/hd_case.py
+++ b/netforce_clinic/models/hd_case.py
@@ -28,7 +28,6 @@ class HDCase(Model):
res[obj.id]=obj.amount
return res
-
_fields={
"number": fields.Char("Number",required=True,search=True),
"time_start": fields.DateTime("Time start",required=True,search=True),