fix labor cost
							parent
							
								
									f9546abf6b
								
							
						
					
					
						commit
						4b767ecab8
					
				|  | @ -1,7 +1,21 @@ | ||||||
| <form model="clinic.labor.cost.line"> | <form model="clinic.labor.cost.line"> | ||||||
|     <field name="date"/> |     <tabs> | ||||||
|     <field name="cycle_id"/> |         <tab string="General"> | ||||||
|     <field name="staff_id"/> |             <field name="date"/> | ||||||
|     <field name="type"/> |             <field name="cycle_id"/> | ||||||
|     <field name="amount"/> |             <field name="staff_id"/> | ||||||
|  |             <field name="type" readonly="1"/> | ||||||
|  |             <field name="branch_id"/> | ||||||
|  |             <field name="department_id"/> | ||||||
|  |             <field name="qty" onchange="onchange_vals" help="Number of HD Case"/> | ||||||
|  |             <field name="rate" onchange="onchange_vals"/> | ||||||
|  |             <field name="amount"/> | ||||||
|  |         </tab> | ||||||
|  |         <tab string="Computation"> | ||||||
|  |             <field name="labor_cost_id"/> | ||||||
|  |         </tab> | ||||||
|  |         <tab string="Other"> | ||||||
|  |             <field name="note"/> | ||||||
|  |         </tab> | ||||||
|  |     </tabs> | ||||||
| </form> | </form> | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
| from . import clinic_setting | from . import clinic_setting | ||||||
| from . import import_acc | #from . import import_acc | ||||||
| from . import remove_conv_bal | #from . import remove_conv_bal | ||||||
|  | from . import update_labor_cost_line | ||||||
|  |  | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | from datetime import datetime | ||||||
|  | 
 | ||||||
|  | from netforce.model import get_model | ||||||
|  | from netforce import migration | ||||||
|  | from netforce.database import get_connection | ||||||
|  | 
 | ||||||
|  | class Migration(migration.Migration): | ||||||
|  |     _name="clinic.update.labor.cost.line" | ||||||
|  |     _version="2.11.0" | ||||||
|  |      | ||||||
|  |     def migrate(self): | ||||||
|  |         for lcost_line in get_model("clinic.labor.cost.line").search_browse([]): | ||||||
|  |             lcost_line.write({ | ||||||
|  |                 'note': ' ', | ||||||
|  |             }) | ||||||
|  |         return True | ||||||
|  | 
 | ||||||
|  | Migration.register() | ||||||
|  | @ -78,7 +78,7 @@ class HDCase(Model): | ||||||
|             for line in obj.lines: |             for line in obj.lines: | ||||||
|                 prod=line.product_id |                 prod=line.product_id | ||||||
|                 categ=line.product_categ_id |                 categ=line.product_categ_id | ||||||
|                 if categ and prod: |                 if categ and prod and line.reimbursable=='yes': | ||||||
|                     if categ.code=='EPO': |                     if categ.code=='EPO': | ||||||
|                         name=prod.name or "" |                         name=prod.name or "" | ||||||
|                         name=name.split("-") #XXX |                         name=name.split("-") #XXX | ||||||
|  |  | ||||||
|  | @ -6,37 +6,54 @@ class LaborCostLine(Model): | ||||||
|     _string="Labor Cost Item" |     _string="Labor Cost Item" | ||||||
|     _name_field="labor_cost_id" |     _name_field="labor_cost_id" | ||||||
| 
 | 
 | ||||||
|  |     def _get_store(self,ids,context={}): | ||||||
|  |         res={} | ||||||
|  |         for obj in self.browse(ids): | ||||||
|  |             staff_type=obj.staff_id.type | ||||||
|  |             citem=obj.labor_cost_id.cycle_item_id | ||||||
|  |             dpt=citem.department_id | ||||||
|  |             br=dpt.branch_id | ||||||
|  |             res[obj.id]={ | ||||||
|  |                 'type': staff_type, | ||||||
|  |                 'branch_id': br.id, | ||||||
|  |                 'department_id': dpt.id, | ||||||
|  |             } | ||||||
|  |         return res | ||||||
|  | 
 | ||||||
|     _fields={ |     _fields={ | ||||||
|         "labor_cost_id": fields.Many2One("clinic.labor.cost","Cycle Item",required=True,on_delete="cascade"), |         "labor_cost_id": fields.Many2One("clinic.labor.cost","Cycle Item",required=True,on_delete="cascade"), | ||||||
|         "type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Type",required=True,search=True), |         "type": fields.Selection([('staff','Staff'),("doctor","Doctor"),('nurse','Nurse')],"Staff Type",required=True,search=True,function="_get_store",function_multi=True), | ||||||
|         'staff_id': fields.Many2One("clinic.staff", "Staff",search=True), |         'staff_id': fields.Many2One("clinic.staff", "Staff",search=True), | ||||||
|         'level_id': fields.Many2One("clinic.staff.level", "Level",search=True), |         'level_id': fields.Many2One("clinic.staff.level", "Level",search=True), | ||||||
|         'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True), |         'cycle_id': fields.Many2One("clinic.cycle", "Cycle",search=True), | ||||||
|         'qty': fields.Integer("#HDCase"), |         'qty': fields.Integer("Qty"), | ||||||
|         'rate': fields.Float("Rate",scale=2), |         'rate': fields.Float("Rate",scale=2), | ||||||
|         'amount': fields.Float("Amount",scale=2), |         'amount': fields.Float("Amount",scale=2), | ||||||
|         'date': fields.Date("Date",search=True), |         'date': fields.Date("Date",search=True), | ||||||
|         'description': fields.Char("Description"), |         'description': fields.Char("Description"), | ||||||
|         'company_id': fields.Many2One('company','Company'), |         'company_id': fields.Many2One('company','Company'), | ||||||
|         'categ_id': fields.Many2One("clinic.staff.categ", "Category",domain=[['type','=','nurse']],search=True), |         'categ_id': fields.Many2One("clinic.staff.categ", "Category",domain=[['type','=','nurse']],search=True), | ||||||
|     } |         'branch_id': fields.Many2One('clinic.branch','Branch',function="_get_store",function_multi=True,store=True,search=True), | ||||||
| 
 |         'department_id': fields.Many2One('clinic.department','Department',function="_get_store",function_multi=True,store=True,search=True), | ||||||
|  |         'note': fields.Text("Note"), | ||||||
|  |     }  | ||||||
|     _defaults={ |     _defaults={ | ||||||
|         "company_id": lambda *a: get_active_company(), |         "company_id": lambda *a: get_active_company(), | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     _order="cycle_id,level_id" |     _order="cycle_id,level_id" | ||||||
|      |      | ||||||
|     def create(self,vals,**kw): |     def create(self,vals,**kw): | ||||||
|         staff_id=vals['staff_id'] |  | ||||||
|         staff=get_model("clinic.staff").browse(staff_id) |  | ||||||
|         if staff.type=='doctor': |  | ||||||
|             vals['type']='doctor' |  | ||||||
|         elif staff.type=='nurse': |  | ||||||
|             vals['type']='nurse' |  | ||||||
|         else: |  | ||||||
|             vals['type']='staff' |  | ||||||
|         new_id=super().create(vals,**kw) |         new_id=super().create(vals,**kw) | ||||||
|  |         self.function_store([new_id]) | ||||||
|         return new_id |         return new_id | ||||||
| 
 | 
 | ||||||
|  |     def write(self,ids,vals,**kw): | ||||||
|  |         self.function_store(ids) | ||||||
|  |         super().write(ids,vals,**kw) | ||||||
|  | 
 | ||||||
|  |     def onchange_vals(self,context={}): | ||||||
|  |         data=context['data'] | ||||||
|  |         data['amount']=(data['rate'] or 0)*(data['qty'] or 0) | ||||||
|  |         return data | ||||||
|  | 
 | ||||||
| LaborCostLine.register() | LaborCostLine.register() | ||||||
|  |  | ||||||
|  | @ -29,13 +29,6 @@ class ReportLaborCostDetail(Model): | ||||||
|         weekday, total_day=monthrange(int(year), int(month)) |         weekday, total_day=monthrange(int(year), int(month)) | ||||||
|         return "%s-%s-%s"%(year,month,total_day) |         return "%s-%s-%s"%(year,month,total_day) | ||||||
| 
 | 
 | ||||||
|     #_defaults={ |  | ||||||
|         #'date': lambda *a: time.strftime("%Y-%m-%d"), |  | ||||||
|         #'date_from': _get_date_from, |  | ||||||
|         #'date_to': _get_date_to, |  | ||||||
|         #'type': 'doctor', |  | ||||||
|     #} |  | ||||||
| 
 |  | ||||||
|     def default_get(self,field_names=None,context={},**kw): |     def default_get(self,field_names=None,context={},**kw): | ||||||
|         defaults=context.get("defaults",{}) |         defaults=context.get("defaults",{}) | ||||||
|         date_from=defaults.get("date_from") |         date_from=defaults.get("date_from") | ||||||
|  | @ -83,6 +76,9 @@ class ReportLaborCostDetail(Model): | ||||||
|             dom.append(['type','=',staff_type]) |             dom.append(['type','=',staff_type]) | ||||||
|         if department_id: |         if department_id: | ||||||
|             dom.append(['labor_cost_id.cycle_item_id.department_id','=',department_id]) |             dom.append(['labor_cost_id.cycle_item_id.department_id','=',department_id]) | ||||||
|  | 
 | ||||||
|  |         def replace_quote(dom=""): | ||||||
|  |             return dom.replace("'","\"") | ||||||
|         #prevent to load more data |         #prevent to load more data | ||||||
|         if not staff_id: |         if not staff_id: | ||||||
|             return {} |             return {} | ||||||
|  | @ -114,6 +110,7 @@ class ReportLaborCostDetail(Model): | ||||||
|                     dpt.name: { |                     dpt.name: { | ||||||
|                         'amt': 0, |                         'amt': 0, | ||||||
|                         'qty': 0, |                         'qty': 0, | ||||||
|  |                         'dom': [['staff_id','=',staff.id],['date','>=', date],['date','<=',date], ['department_id','=',dpt.id]], | ||||||
|                         }, |                         }, | ||||||
|                     } |                     } | ||||||
|             if not dates[date].get(dpt.name): |             if not dates[date].get(dpt.name): | ||||||
|  | @ -124,6 +121,7 @@ class ReportLaborCostDetail(Model): | ||||||
|                         dpt.name: { |                         dpt.name: { | ||||||
|                             'amt': 0, |                             'amt': 0, | ||||||
|                             'qty': 0, |                             'qty': 0, | ||||||
|  |                             'dom': [['staff_id','=',staff.id],['date','>=', date],['date','<=',date], ['department_id','=',dpt.id]], | ||||||
|                         }}) |                         }}) | ||||||
|             dates[date][dpt.name]['amt']+=amt |             dates[date][dpt.name]['amt']+=amt | ||||||
|             dates[date][dpt.name]['qty']+=qty |             dates[date][dpt.name]['qty']+=qty | ||||||
|  | @ -147,10 +145,19 @@ class ReportLaborCostDetail(Model): | ||||||
|                 amt,qty=0,0 |                 amt,qty=0,0 | ||||||
|                 dname=dpt['name'] or '' |                 dname=dpt['name'] or '' | ||||||
|                 dpt_vals=vals.get(dname) |                 dpt_vals=vals.get(dname) | ||||||
|  |                 url_name=None | ||||||
|                 if dpt_vals: |                 if dpt_vals: | ||||||
|                     amt=dpt_vals.get("amt",0) |                     amt=dpt_vals.get("amt",0) | ||||||
|                     qty=dpt_vals.get("qty",0) |                     qty=dpt_vals.get("qty",0) | ||||||
|                 lvals['sub_lines'].append({'qty': qty, 'amt': amt, 'dpt_id': dpt['id']}) |                     dom=dpt_vals.get('dom',[]) | ||||||
|  |                     if dom: | ||||||
|  |                         url_name='#name=clinic_labor_cost_item&mode=list&search_domain=%s&tab_no=0'%replace_quote('%s'%dom), | ||||||
|  |                 lvals['sub_lines'].append({ | ||||||
|  |                         'qty': qty,  | ||||||
|  |                         'amt': amt,  | ||||||
|  |                         'dpt_id': dpt['id'], | ||||||
|  |                         'url_name': url_name, | ||||||
|  |                     }) | ||||||
|                 total_amt+=amt |                 total_amt+=amt | ||||||
|                 total_qty+=qty |                 total_qty+=qty | ||||||
|             lvals['total_qty']=total_qty # total show as right hand side |             lvals['total_qty']=total_qty # total show as right hand side | ||||||
|  |  | ||||||
|  | @ -41,7 +41,9 @@ | ||||||
|                             <a href="#name=clinic_report_labor_cost_daily&defaults.date={{../date}}&defaults.staff_type={{../staff_type}}&defaults.staff_id={{../staff_id}}&defaults.department_id={{dpt_id}}">{{currency qty zero=""}}</a> |                             <a href="#name=clinic_report_labor_cost_daily&defaults.date={{../date}}&defaults.staff_type={{../staff_type}}&defaults.staff_id={{../staff_id}}&defaults.department_id={{dpt_id}}">{{currency qty zero=""}}</a> | ||||||
|                         </td> |                         </td> | ||||||
|                         <td style="text-align:right;"> |                         <td style="text-align:right;"> | ||||||
|                             {{currency amt zero=""}} |                             <a href="{{url_name}}" target="_blank"> | ||||||
|  |                                 {{currency amt zero=""}} | ||||||
|  |                             </a> | ||||||
|                         </td> |                         </td> | ||||||
|                     {{/each}} |                     {{/each}} | ||||||
|                     <td style="text-align:right;"> |                     <td style="text-align:right;"> | ||||||
|  |  | ||||||
|  | @ -12,10 +12,10 @@ | ||||||
|         </tr> |         </tr> | ||||||
|         <tr> |         <tr> | ||||||
|             <th rowspan="2">#</th> |             <th rowspan="2">#</th> | ||||||
|             <th rowspan="2">Number</th> |             <th rowspan="2">รหัส</th> | ||||||
|             <th rowspan="2">Name</th> |             <th rowspan="2">ชื่อ-สกุล</th> | ||||||
|             <th rowspan="2">Level</th> |             <th rowspan="2">ตำแหน่ง</th> | ||||||
|             <th rowspan="2">Category</th> |             <th rowspan="2">หมวดหมู่</th> | ||||||
|                 {{#each dpts}} |                 {{#each dpts}} | ||||||
|                     <th style="text-align:right">{{name}}</th> |                     <th style="text-align:right">{{name}}</th> | ||||||
|                 {{/each}} |                 {{/each}} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue