pharmacy - sale medecine
parent
44afe08d55
commit
f61aa16d5b
|
@ -0,0 +1,6 @@
|
||||||
|
<action>
|
||||||
|
<field name="string">Pharmacies</field>
|
||||||
|
<field name="view_cls">multi_view</field>
|
||||||
|
<field name="model">clinic.pharmacy</field>
|
||||||
|
<field name="menu">clinic_menu</field>
|
||||||
|
</action>
|
|
@ -68,13 +68,6 @@
|
||||||
</field>
|
</field>
|
||||||
</group>
|
</group>
|
||||||
<group span="8" form_layout="stacked">
|
<group span="8" form_layout="stacked">
|
||||||
<!--
|
|
||||||
<field name="invoice_policy" onchange="onchange_policy"/>
|
|
||||||
<newline/>
|
|
||||||
<group attrs='{"invisible":[["invoice_policy","in",["","fee"]]]}'>
|
|
||||||
<field name="invoice_option"/>
|
|
||||||
</group>
|
|
||||||
-->
|
|
||||||
</group>
|
</group>
|
||||||
<group span="4" columns="1">
|
<group span="4" columns="1">
|
||||||
<field name="total_amount"/>
|
<field name="total_amount"/>
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
</item>
|
</item>
|
||||||
<item string="HD Cases" perm="clinic_hdcase">
|
<item string="HD Cases" perm="clinic_hdcase">
|
||||||
<item string="HD Cases" action="clinic_hd_case"/>
|
<item string="HD Cases" action="clinic_hd_case"/>
|
||||||
|
<item string="Pharmacies" action="clinic_pharmacy" perm="clinic_pharmacy"/>
|
||||||
<divider/>
|
<divider/>
|
||||||
<header string="SETTINGS"/>
|
<header string="SETTINGS"/>
|
||||||
<item string="Sickbed" action="clinic_sickbed"/>
|
<item string="Sickbed" action="clinic_sickbed"/>
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<form model="clinic.pharmacy">
|
||||||
|
<head>
|
||||||
|
<field name="state"/>
|
||||||
|
<button string="Options" dropdown="1">
|
||||||
|
<item string="Copy"/>
|
||||||
|
</button>
|
||||||
|
</head>
|
||||||
|
<group form_layout="stacked">
|
||||||
|
<field name="number" span="2"/>
|
||||||
|
<field name="date" span="2"/>
|
||||||
|
<field name="patient_id" required='1' span="2"/>
|
||||||
|
<field name="ref" span="2"/>
|
||||||
|
<field name="lines" nolabel="1">
|
||||||
|
<list>
|
||||||
|
<field name="product_id" onchange="onchange_product"/>
|
||||||
|
<field name="description"/>
|
||||||
|
<field name="uom_id"/>
|
||||||
|
<field name="qty"/>
|
||||||
|
<field name="price"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
<group span="9" columns="1">
|
||||||
|
<group form_layout="stacked">
|
||||||
|
<field name="user_id" span="3"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<group span="3" columns="1">
|
||||||
|
<field name="total"/>
|
||||||
|
</group>
|
||||||
|
<foot>
|
||||||
|
<button string="Pay" type="success"/>
|
||||||
|
</foot>
|
||||||
|
<related>
|
||||||
|
<field name="invoices"/>
|
||||||
|
<field name="payments"/>
|
||||||
|
<field name="pickings"/>
|
||||||
|
</related>
|
||||||
|
</form>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<list model="clinic.pharmacy">
|
||||||
|
<field name="number"/>
|
||||||
|
<field name="date"/>
|
||||||
|
<field name="patient_id"/>
|
||||||
|
<field name="user_id"/>
|
||||||
|
<field name="state"/>
|
||||||
|
</list>
|
|
@ -85,3 +85,5 @@ from . import product_categ
|
||||||
from . import make_apt
|
from . import make_apt
|
||||||
from . import make_apt_line
|
from . import make_apt_line
|
||||||
from . import matching_payment
|
from . import matching_payment
|
||||||
|
from . import pharmacy
|
||||||
|
from . import pharmacy_line
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
from netforce.model import Model, fields, get_model
|
||||||
|
from netforce.access import get_active_user
|
||||||
|
from netforce.utils import get_data_path
|
||||||
|
|
||||||
|
class Pharmacy(Model):
|
||||||
|
_name="clinic.pharmacy"
|
||||||
|
_string="Pharmacy"
|
||||||
|
|
||||||
|
def _get_all(self,ids,context={}):
|
||||||
|
res={}
|
||||||
|
for obj in self.browse(ids):
|
||||||
|
res[obj.id]={
|
||||||
|
'total': 0,
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
|
||||||
|
_fields={
|
||||||
|
"number": fields.Char("Number",required=True,search=True),
|
||||||
|
"ref": fields.Char("Ref",search=True),
|
||||||
|
'date': fields.Date("Date",search=True),
|
||||||
|
'patient_id': fields.Many2One('clinic.patient','Patient',search=True),
|
||||||
|
'lines': fields.One2Many('clinic.pharmacy.line','pharmacy_id','Lines'),
|
||||||
|
'total': fields.Float("Total",function="_get_all",function_multi=True),
|
||||||
|
'user_id': fields.Many2One("base.user","Pharmacist"),
|
||||||
|
'state': fields.Selection([['draft','Draft'],['waiting_payment','Waiting Payment'],['paid','Paid']],'State'),
|
||||||
|
"pickings": fields.One2Many("stock.picking","related_id","Pickings"),
|
||||||
|
"invoices": fields.One2Many("account.invoice","related_id","Invoices"),
|
||||||
|
"payments": fields.One2Many("account.payment","related_id","Payments"),
|
||||||
|
}
|
||||||
|
|
||||||
|
_defaults={
|
||||||
|
'date': lambda *a: time.strftime("%Y-%m-%d"),
|
||||||
|
'number': '/',
|
||||||
|
'user_id': lambda *a: get_active_user(),
|
||||||
|
'state': 'draft',
|
||||||
|
}
|
||||||
|
|
||||||
|
def onchange_product(self,context={}):
|
||||||
|
data=context['data']
|
||||||
|
path=context['path']
|
||||||
|
line=get_data_path(data,path,parent=True)
|
||||||
|
prod_id=line['product_id']
|
||||||
|
prod=get_model('product').browse(prod_id)
|
||||||
|
line['uom_id']=prod.uom_id.id
|
||||||
|
line['description']=prod.name or ''
|
||||||
|
line['price']=prod.sale_price or 0
|
||||||
|
if not line.get('qty'):
|
||||||
|
line['qty']=1
|
||||||
|
line['amount']=line['price']*line['qty']
|
||||||
|
return data
|
||||||
|
|
||||||
|
Pharmacy.register()
|
|
@ -0,0 +1,18 @@
|
||||||
|
from netforce.model import Model, fields
|
||||||
|
|
||||||
|
class PharmacyLine(Model):
|
||||||
|
_name="clinic.pharmacy.line"
|
||||||
|
_string="Pharmacy Line"
|
||||||
|
|
||||||
|
_fields={
|
||||||
|
'pharmacy_id': fields.Many2One('clinic.pharmacy','Pharmacy',required=True,on_delete="cascade"),
|
||||||
|
'product_id': fields.Many2One('product','Product'),
|
||||||
|
'description': fields.Char("Description"),
|
||||||
|
'uom_id': fields.Many2One("uom","UOM"),
|
||||||
|
'qty': fields.Integer("Qty"),
|
||||||
|
'price': fields.Float("Price"),
|
||||||
|
'amount': fields.Float("Amount"),
|
||||||
|
'account_id': fields.Many2One("account.account","Account"),
|
||||||
|
}
|
||||||
|
|
||||||
|
PharmacyLine.register()
|
|
@ -17,7 +17,7 @@
|
||||||
<thead>
|
<thead>
|
||||||
<th>รอบ</th>
|
<th>รอบ</th>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th>ใบนัดแพทย์</th>
|
<th>ใบนัด</th>
|
||||||
<th>HN</th>
|
<th>HN</th>
|
||||||
<th>ผู้ป่วย</th>
|
<th>ผู้ป่วย</th>
|
||||||
<!--
|
<!--
|
||||||
|
|
|
@ -3,6 +3,8 @@ todo:
|
||||||
- doctor labort cost detail ***
|
- doctor labort cost detail ***
|
||||||
- matching payment ***
|
- matching payment ***
|
||||||
- popup messagging
|
- popup messagging
|
||||||
|
- modify message of log
|
||||||
|
- show image of staff
|
||||||
=======
|
=======
|
||||||
generate visit ใหม่ -> ok
|
generate visit ใหม่ -> ok
|
||||||
popup select dyalyzer -> ok
|
popup select dyalyzer -> ok
|
||||||
|
|
Loading…
Reference in New Issue