diff --git a/netforce_clinic/actions/clinic_dialyzer.xml b/netforce_clinic/actions/clinic_dialyzer.xml index 64d402d..d7fcd4e 100644 --- a/netforce_clinic/actions/clinic_dialyzer.xml +++ b/netforce_clinic/actions/clinic_dialyzer.xml @@ -2,7 +2,7 @@ Dialyzer multi_view clinic.dialyzer - [["All",[]],["New",[["state","=","new"]]],["Active",[["state","=","active"]]],["Drop",[["state","=","drop"]]],["Cancelled",[["state","=","cancelled"]]]] + [["All",[]],["New",[["state","=","new"]]],["Active",[["state","=","active"]]],["Drop",[["state","=","drop"]]],["Expire",[["state","=","expire"]]],["Cancelled",[["state","=","cancelled"]]]] list,page,form clinic_menu diff --git a/netforce_clinic/layouts/clinic_hd_case_form.xml b/netforce_clinic/layouts/clinic_hd_case_form.xml index c8cc40b..bd95f6c 100644 --- a/netforce_clinic/layouts/clinic_hd_case_form.xml +++ b/netforce_clinic/layouts/clinic_hd_case_form.xml @@ -32,7 +32,7 @@ - + diff --git a/netforce_clinic/models/dialyzer.py b/netforce_clinic/models/dialyzer.py index 14d35ca..177f497 100644 --- a/netforce_clinic/models/dialyzer.py +++ b/netforce_clinic/models/dialyzer.py @@ -21,7 +21,7 @@ class Dialyzer(Model): "dialyzer_type": fields.Selection([("low","low flux"),("high","high flux"),("dbl","dbl hifulx")],"Dialyzer Type"), "bid_flow_rate": fields.Integer("Bid Flow Rate (ml/min)",search=True), "ultrafittration": fields.Float("Ultrafittration Kg.",search=True), - "state": fields.Selection([("new","New"),("active","Active"),("drop","Drop"),('cancelled','Cancelled')],"Status"), + "state": fields.Selection([("new","New"),("active","Active"),("drop","Drop"),("expire","Expire"),('cancelled','Cancelled')],"Status"), "comments": fields.One2Many("message","related_id","Comments"), "company_id": fields.Many2One("company","Company"), 'product_id': fields.Many2One("product", "Product",required=True), diff --git a/netforce_clinic/models/hd_case.py b/netforce_clinic/models/hd_case.py index 9485b0b..4fc0f61 100644 --- a/netforce_clinic/models/hd_case.py +++ b/netforce_clinic/models/hd_case.py @@ -197,6 +197,8 @@ class HDcase(Model): } vals['lines'].append(('create',line)) inv_id=get_model("account.invoice").create(vals,context) + # create picking + obj.make_pickings() if obj.fee: vals={ "type": "out", @@ -225,6 +227,64 @@ class HDcase(Model): vals['lines'].append(('create',line)) inv_id=get_model("account.invoice").create(vals,context) + def make_pickings(self,ids,context={}): + obj=self.browse(ids[0]) + # no picking + if not obj.lines: + return + + partner=obj.patient_id.partner_id + if not partner: + raise Exception("Contact not for this patient") + ship_address_id=None + for address in partner.addresses: + if address.type=="shipping": + ship_address_id=address.id + break + if not ship_address_id: + raise Exception("contact %s dont'have address with type shipping"%partner.name) + pick_vals={ + "type": "out", + "ref": obj.number, + "related_id": "clinic.hd.case,%s"%obj.id, + "partner_id": obj.patient_id.partner_id.id, + "ship_address_id": ship_address_id, + "state": "draft", + "lines": [], + } + res=get_model("stock.location").search([["type","=","customer"]]) + if not res: + raise Exception("Customer location not found") + cust_loc_id=res[0] + + + for line in obj.lines: + prod=line.product_id + if prod.type != 'stock': + continue + wh_loc_id=prod.location_id.id + if not wh_loc_id: + res=get_model("stock.location").search([["type","=","internal"]]) + if not res: + raise Exception("Warehouse not found") + wh_loc_id=res[0] + line_vals={ + "product_id": prod.id, + "qty": 1, + "uom_id": prod.uom_id.id, + "location_from_id": wh_loc_id, + "location_to_id": cust_loc_id, + } + pick_vals["lines"].append(("create",line_vals)) + if not pick_vals["lines"]: + return { + "flash": "Nothing left to deliver", + } + picking_obj=get_model("stock.picking") + pick_id=picking_obj.create(pick_vals,context={"pick_type": "out"}) + pick=picking_obj.browse(pick_id) + pick.set_done([pick_id]) + def post_invoices(self,ids,context={}): obj=self.browse(ids[0]) for inv in obj.invoices: diff --git a/netforce_clinic/models/hd_case_dialyzer.py b/netforce_clinic/models/hd_case_dialyzer.py index acf1372..f3f407a 100644 --- a/netforce_clinic/models/hd_case_dialyzer.py +++ b/netforce_clinic/models/hd_case_dialyzer.py @@ -8,10 +8,10 @@ class HdcaseDialyzer(Model): "description": fields.Char("Description",search=True), "use_time":fields.Integer("Use time"), "max_use_time":fields.Integer("Max use time"), - "member_type": fields.Selection([("unsub","Unsub cellul"),("sub","Sub cellul"),("synthetic","Synthetic")],"Member Type",required=True), - "dialyzer_type": fields.Selection([("low","low flux"),("high","high flux"),("dbl","dbl hifulx")],"Member Type",required=True), - "bid_flow_rate": fields.Integer("Bid Flow Rate (ml/min)",required=True,search=True), - "ultrafittration": fields.Float("Ultrafittration Kg.",required=True,search=True), + "member_type": fields.Selection([("unsub","Unsub cellul"),("sub","Sub cellul"),("synthetic","Synthetic")],"Member Type"), + "dialyzer_type": fields.Selection([("low","low flux"),("high","high flux"),("dbl","dbl hifulx")],"Member Type"), + "bid_flow_rate": fields.Integer("Bid Flow Rate (ml/min)"), + "ultrafittration": fields.Float("Ultrafittration Kg."), "state":fields.Selection([("draft","New"),("active","Active"),("drop","Drop")],"Status"), } diff --git a/netforce_clinic/models/visit.py b/netforce_clinic/models/visit.py index 50de21f..bea7f3d 100644 --- a/netforce_clinic/models/visit.py +++ b/netforce_clinic/models/visit.py @@ -55,7 +55,7 @@ class Visit(Model): 'nurse_id': _get_nurse, 'time_use': 1, } - _order="date,cycle" + _order="number desc" def get_dialyzer(self): return @@ -107,19 +107,31 @@ class Visit(Model): break # find dialyser - for dlz in get_model("clinic.dialyzer").search_browse([['patient_id','=',obj.patient_id.id],['state','=','active']]): - vals['dialyzers'].append({ - "dialzer_id": dlz.id, + for dlz in get_model("clinic.dialyzer").search_browse([['patient_id','=',obj.patient_id.id],['state','=','active']],order="id desc"): + use_time=dlz.use_time or 0 + use_time+=1 + # XXX update dialyzer + dlz.write({ + 'use_time': use_time, + }) + if use_time > dlz.max_use_time: + dlz.write({ + "state": "expire", + }) + continue + vals['dialyzers'].append(('create',{ + "dialyzer_id": dlz.id, "description": dlz.description, - "use_time": dlz.use_time, + "use_time": use_time, "max_use_time": dlz.max_use_time, "member_type": dlz.member_type, "dialyzer_type": dlz.dialyzer_type, "bid_flow_rate": dlz.bid_flow_rate, "ultrafittration": dlz.ultrafittration, - }) - - hd_case_id=hd_case_id=hd_case_obj.create(vals) + })) + if not vals['dialyzers']: + raise Exception("%s don't have dialyzer for treatment" % obj.patient_id.name) + hd_case_id=hd_case_obj.create(vals) obj.write({"state":"confirmed"}) return { 'next': { @@ -141,11 +153,16 @@ class Visit(Model): def onchange_patient(self,context={}): data=context['data'] patient_id=data['patient_id'] - visits=self.search_browse([['patient_id','=',patient_id]]) + visits=self.search_browse([['patient_id','=',patient_id]],order="number desc") if visits: - visit=visits[-1] + #print([(v.id, v.visit_date,v.cycle) for v in visits]) + visit=visits[0] data['doctor_id']=visit.doctor_id.id data['department_id']=visit.department_id.id + cycle=int(visit.cycle)+1 + data['cycle']=str(cycle) + if cycle>4: + data['cycle']='1' else: data['doctor_id']=None data['department_id']=None @@ -159,6 +176,14 @@ class Visit(Model): 'nurse_id': obj.nurse_id.id, 'department_id': obj.department_id.id, } + # XXX update cycle + visits=self.search_browse([['patient_id','=',obj.patient_id.id]],order="number desc") + if visits: + visit=visits[0] # order desc already + cycle=int(visit.cycle)+1 + vals['cycle']=str(cycle) + if cycle>4: + vals['cycle']='1' new_id=self.create(vals,context=context) new_obj=self.browse(new_id) return { diff --git a/netforce_clinic/todo.txt b/netforce_clinic/todo.txt index 4a99419..60aa507 100644 --- a/netforce_clinic/todo.txt +++ b/netforce_clinic/todo.txt @@ -11,4 +11,5 @@ question? - how cycle running? - treatment - 1 cycle take how long ? - +issue: + hd case should link only 1 dialyzer -> should not copy 2 time