@ -0,0 +1 @@ |
|||||
|
import models |
@ -0,0 +1,25 @@ |
|||||
|
{ |
||||
|
'name': "Pharmacy Marketing", |
||||
|
'summary': """Sales Representative, Doctors, Targets,..etc for Medicine filed """, |
||||
|
'description': """ |
||||
|
""", |
||||
|
|
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'category': 'Medicine', |
||||
|
'version': '0.1', |
||||
|
'depends': ["base", |
||||
|
'medical_feature', |
||||
|
"sale", "marketing", |
||||
|
"marketing_campaign", |
||||
|
"hr", "account", |
||||
|
"hr_payroll"], |
||||
|
'data': ['views/med_marketing_view.xml', |
||||
|
'views/rep_view.xml', |
||||
|
'views/doctor_view.xml', |
||||
|
'views/doctor_exp_view.xml', ], |
||||
|
'demo': ['demo/demo.xml'], |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': True, |
||||
|
} |
@ -0,0 +1,138 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--DEMO DATA [DEPARTMENTS]--> |
||||
|
<record id="departments1" model="pha_marketing.departments"> |
||||
|
<field name="name">Neurology</field> |
||||
|
</record> |
||||
|
<record id="departments2" model="pha_marketing.departments"> |
||||
|
<field name="name">Cardiology</field> |
||||
|
</record> |
||||
|
<record id="departments3" model="pha_marketing.departments"> |
||||
|
<field name="name">Dentistry</field> |
||||
|
</record> |
||||
|
<record id="departments4" model="pha_marketing.departments"> |
||||
|
<field name="name">ENT</field> |
||||
|
</record> |
||||
|
<record id="departments5" model="pha_marketing.departments"> |
||||
|
<field name="name">Gynaecology</field> |
||||
|
</record> |
||||
|
<record id="departments6" model="pha_marketing.departments"> |
||||
|
<field name="name">Pediatrics</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<!--DEMO REPS--> |
||||
|
<record id="rep1" model="hr.employee"> |
||||
|
<field name="name">Liam Gomer</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">150000</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="rep2" model="hr.employee"> |
||||
|
<field name="name">Roger Scott</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">450000</field> |
||||
|
<field name="image" type="base64" file="hr/static/img/employee_fp-image.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="rep3" model="hr.employee"> |
||||
|
<field name="name">David</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">850000</field> |
||||
|
<field name="image" type="base64" file="hr/static/img/employee_al-image.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="rep4" model="hr.employee"> |
||||
|
<field name="name">Macklin</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">780000</field> |
||||
|
<field name="image" type="base64" file="hr/static/img/employee_niv-image.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="rep5" model="hr.employee"> |
||||
|
<field name="name">Jack</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">750000</field> |
||||
|
<field name="image" type="base64" file="hr/static/img/employee_mit-image.png"/> |
||||
|
</record> |
||||
|
<record id="rep6" model="hr.employee"> |
||||
|
<field name="name">Joe</field> |
||||
|
<field name="rep">1</field> |
||||
|
<field name="target">960000</field> |
||||
|
<field name="image" type="base64" file="hr/static/img/employee_chs-image.jpg"/> |
||||
|
</record> |
||||
|
<!--DEMO DOCTORS--> |
||||
|
<record id="dr1" model="res.partner"> |
||||
|
<field name="name">Dr. Arden</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">1</field> |
||||
|
<field name="specialist_in" ref="departments2"/> |
||||
|
<field name="related_rep" ref="rep1"/> |
||||
|
<field name="target">15000</field> |
||||
|
<field name="email">arden@gmail.com</field> |
||||
|
<field name="mobile">2653241536</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr1.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="dr2" model="res.partner"> |
||||
|
<field name="name">Dr.Armstrong</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">0</field> |
||||
|
<field name="specialist_in" ref="departments3"/> |
||||
|
<field name="related_rep" ref="rep2"/> |
||||
|
<field name="target">26000</field> |
||||
|
<field name="email">armstrong@gmail.com</field> |
||||
|
<field name="mobile">2653651436</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr2.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="dr3" model="res.partner"> |
||||
|
<field name="name">Dr.Saunder</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">0</field> |
||||
|
<field name="specialist_in" ref="departments4"/> |
||||
|
<field name="related_rep" ref="rep3"/> |
||||
|
<field name="target">78000</field> |
||||
|
<field name="email">saunder@yahoo.com</field> |
||||
|
<field name="mobile">2653365436</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr3.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="dr4" model="res.partner"> |
||||
|
<field name="name">Dr.Asbjorn</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">0</field> |
||||
|
<field name="specialist_in" ref="departments5"/> |
||||
|
<field name="related_rep" ref="rep4"/> |
||||
|
<field name="target">75000</field> |
||||
|
<field name="email">asbjorn@yahoo.com</field> |
||||
|
<field name="mobile">2657415436</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr4.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="dr5" model="res.partner"> |
||||
|
<field name="name">Dr.Salomon</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">0</field> |
||||
|
<field name="specialist_in" ref="departments6"/> |
||||
|
<field name="related_rep" ref="rep5"/> |
||||
|
<field name="target">85000</field> |
||||
|
<field name="email">salomon@yahoo.com</field> |
||||
|
<field name="mobile">4877415436</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr6.jpg"/> |
||||
|
</record> |
||||
|
<record id="dr6" model="res.partner"> |
||||
|
<field name="name">Dr.Saunderson</field> |
||||
|
<field name="doctor">1</field> |
||||
|
<field name="customer">0</field> |
||||
|
<field name="specialist_in" ref="departments1"/> |
||||
|
<field name="related_rep" ref="rep6"/> |
||||
|
<field name="target">65000</field> |
||||
|
<field name="email">saunderson@gmail.com</field> |
||||
|
<field name="mobile">6987415436</field> |
||||
|
<field name="image" type="base64" file="med_marketing/static/img/dr7.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1 @@ |
|||||
|
import doctor,med_marketing,rep,doctor_exp |
@ -0,0 +1,33 @@ |
|||||
|
from openerp import models, fields, api |
||||
|
import datetime |
||||
|
from dateutil import parser |
||||
|
|
||||
|
|
||||
|
class Doctors(models.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
doctor = fields.Boolean('Doctor') |
||||
|
specialist_in = fields.Many2one('pha_marketing.departments', 'Specialist in') |
||||
|
related_rep = fields.Many2one('hr.employee', string='Related Rep.', domain="[('rep','=',True)]") |
||||
|
target = fields.Integer('Doctor Target') |
||||
|
|
||||
|
@api.one |
||||
|
def _get_total_sale(self): |
||||
|
total = 0.0 |
||||
|
created_domain = [('type', 'in', ['out_invoice', 'out_refund']), ('state', 'not in', ['draft', 'cancel']), ] |
||||
|
for EACH_REPORT in self.env['account.invoice.report'].search(created_domain): |
||||
|
if self.zip == EACH_REPORT.partner_id.zip: |
||||
|
if self.specialist_in.id in EACH_REPORT.product_id.uses_in.ids: |
||||
|
if parser.parse(EACH_REPORT.date).month == datetime.date.today().month: |
||||
|
total_doctor = 0 |
||||
|
for EACH_Doctor in self.search([('doctor', '=', True)]): |
||||
|
if EACH_Doctor.zip == self.zip and EACH_Doctor.specialist_in.id in EACH_REPORT.product_id.uses_in.ids: |
||||
|
|
||||
|
total_doctor += 1 |
||||
|
if total_doctor != 0: |
||||
|
total += (EACH_REPORT.price_total/total_doctor) |
||||
|
|
||||
|
|
||||
|
self.total_sale = total |
||||
|
total_sale = fields.Integer('Total sale', compute='_get_total_sale', help='Will calculate the doctors by considering zip code of both Doctors and Retailers and compare the department of doctor with use of sold medicines.') |
||||
|
|
@ -0,0 +1,72 @@ |
|||||
|
from openerp import models, fields,api |
||||
|
import datetime |
||||
|
|
||||
|
|
||||
|
class DoctorBenefit(models.Model): |
||||
|
_name = 'med_marketing.doctor.line' |
||||
|
|
||||
|
name = fields.Char('Description') |
||||
|
doctor_id = fields.Many2one('res.partner') |
||||
|
account_id = fields.Many2one('account.account', 'Account') |
||||
|
amt = fields.Float('Cost') |
||||
|
exp_account = fields.Many2one('account.account', 'Expenses Account') |
||||
|
state = fields.Selection([('unposted', 'Draft'), ('posted', 'Posted'), ], default="unposted") |
||||
|
journal_id = fields.Many2one('account.journal', 'Journal') |
||||
|
|
||||
|
@api.one |
||||
|
def post_confirm(self): |
||||
|
self.state = 'posted' |
||||
|
ref = 'DRX' + str(datetime.datetime.now().year) + str(self.id).zfill(4) |
||||
|
num = 'DRX' + '/' + str(datetime.datetime.now().year) + '/' + str(self.id).zfill(4) |
||||
|
if self.name == False: |
||||
|
description = '' |
||||
|
else: |
||||
|
description = self.name |
||||
|
j_lines_list = [] |
||||
|
j_lines_1 = {'name': description, |
||||
|
'partner_id': None, |
||||
|
'account_id': self.account_id.id, |
||||
|
'debit': 0.0, |
||||
|
'credit': self.amt, |
||||
|
} |
||||
|
|
||||
|
j_lines_list.append((0, 0, j_lines_1)) |
||||
|
j_lines_2 = {'name': description, |
||||
|
'partner_id': None, |
||||
|
'account_id': self.exp_account.id, |
||||
|
'debit': self.amt, |
||||
|
'credit': 0.0, |
||||
|
} |
||||
|
|
||||
|
j_lines_list.append((0, 0, j_lines_2)) |
||||
|
|
||||
|
j_values = {'name': num, |
||||
|
'journal_id': self.journal_id.id, |
||||
|
'ref': ref, |
||||
|
'state': 'posted' |
||||
|
} |
||||
|
|
||||
|
j_values.update({'line_id': j_lines_list}) |
||||
|
j_obj = self.pool.get('account.move') |
||||
|
j_obj.create(self._cr, self._uid, j_values) |
||||
|
|
||||
|
|
||||
|
class Doctors(models.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
@api.one |
||||
|
def get_current_id(self): |
||||
|
return self.id |
||||
|
|
||||
|
def doctor_exp_btn(self, cr, uid, ids, context=None): |
||||
|
created_domain = '[("doctor_id","in",'+str(self.get_current_id(cr, uid, ids, context))+')]' |
||||
|
return { |
||||
|
'name':'Doctor Expenses', |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'res_model': 'med_marketing.doctor.line', |
||||
|
'view_type': 'form', |
||||
|
'view_mode': 'tree,form', |
||||
|
'target': 'current', |
||||
|
'domain': created_domain, |
||||
|
} |
||||
|
|
@ -0,0 +1,14 @@ |
|||||
|
from openerp import models, fields,api |
||||
|
|
||||
|
|
||||
|
class MedicalDepartments(models.Model): |
||||
|
_name = 'pha_marketing.departments' |
||||
|
|
||||
|
name = fields.Char('Name of Department') |
||||
|
|
||||
|
|
||||
|
class MedicinesInfo(models.Model): |
||||
|
_inherit = "product.template" |
||||
|
|
||||
|
uses_in = fields.Many2many('pha_marketing.departments', 'name') |
||||
|
|
@ -0,0 +1,18 @@ |
|||||
|
from openerp import models, fields,api |
||||
|
|
||||
|
|
||||
|
class RepEmployee(models.Model): |
||||
|
_inherit = 'hr.employee' |
||||
|
|
||||
|
rep = fields.Boolean('Medical Representative') |
||||
|
commission = fields.Float('Commission') |
||||
|
target = fields.Integer('Target') |
||||
|
|
||||
|
@api.one |
||||
|
def _get_total_sale(self): |
||||
|
total = 0.0 |
||||
|
for EACH_Doctor in self.env['res.partner'].search([('doctor', '=', True)]): |
||||
|
if EACH_Doctor.related_rep.id == self.id: |
||||
|
total += EACH_Doctor.total_sale |
||||
|
self.total_sale = total |
||||
|
total_sale = fields.Integer('Total sale', compute='_get_total_sale') |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 492 KiB |
@ -0,0 +1,81 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<!--FORM [DOCTOR EXPENSES]--> |
||||
|
<record id="form_doctor_exp" model="ir.ui.view"> |
||||
|
<field name="name">med_marketing.doctor.line.form</field> |
||||
|
<field name="model">med_marketing.doctor.line</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<header> |
||||
|
<button string="Post" states="unposted" name="post_confirm" type="object" class="oe_highlight"/> |
||||
|
<field name="state" widget="statusbar" statusbar_visible="unposted,posted"/> |
||||
|
</header> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<group> |
||||
|
|
||||
|
<field name="name" attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
<field name="doctor_id" |
||||
|
domain="[('doctor', '=', True)]" |
||||
|
context="{'search_default_doctor':1, 'default_doctor':1, 'default_supplier':0, 'default_customer':0}" |
||||
|
attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
<field name="amt" |
||||
|
attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="journal_id" required="1" attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
<field name="account_id" |
||||
|
domain="[('type', 'in', ['liquidity', 'payable'])]" |
||||
|
required="1" |
||||
|
attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
<field name="exp_account" |
||||
|
domain="[('user_type.report_type','=','expense'), ('type','!=','view')]" |
||||
|
required="1" |
||||
|
attrs="{'readonly':[('state', 'in', ('posted'))]}"/> |
||||
|
|
||||
|
</group> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--TREE [DOCTOR EXPENSES]--> |
||||
|
<record id="tree_doctor_exp" model="ir.ui.view"> |
||||
|
<field name="name">med_marketing.doctor.line.tree</field> |
||||
|
<field name="model">med_marketing.doctor.line</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree colors="blue:state=='unposted'"> |
||||
|
<field name="name"/> |
||||
|
<field name="doctor_id"/> |
||||
|
<field name="account_id"/> |
||||
|
<field name="amt"/> |
||||
|
<field name="exp_account"/> |
||||
|
<field name="state"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION [DOCTOR EXPENSES]--> |
||||
|
<record id="action_doctor_exp" model="ir.actions.act_window"> |
||||
|
<field name="name">Doctor Benefits</field> |
||||
|
<field name="res_model">med_marketing.doctor.line</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
<field name="domain">[]</field> |
||||
|
<field name="context">{}</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="oe_view_nocontent_create"> |
||||
|
Click to add a new doctor benefits. |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--MENU [DOCTOR EXPENSES]--> |
||||
|
<menuitem action="action_doctor_exp" |
||||
|
id="menu_doctor_exp" |
||||
|
sequence="3" |
||||
|
parent="med_marketing.menu_marketing"/> |
||||
|
|
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,81 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<!--SEARCH [DOCTORS]--> |
||||
|
<record id="search_res_partner_doctor" model="ir.ui.view"> |
||||
|
<field name="name">res.partner.doctor</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base.view_res_partner_filter"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//filter[@name='supplier']" position="after"> |
||||
|
<filter string="Doctors" |
||||
|
name="doctor" |
||||
|
domain="[('doctor','=',1)]" |
||||
|
help="Doctor Partners"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--FORM [DOCTOR]--> |
||||
|
<record id="form_res_partner_doctor" model="ir.ui.view"> |
||||
|
<field name="name">res.partner.doctor</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base.view_partner_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//page[@name='sales_purchases']/group[1]/group[2]" position="inside"> |
||||
|
<field name="doctor"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='parent_id']" position="before"> |
||||
|
<label for="specialist_in" string="Specialist in" attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
<field name="specialist_in" |
||||
|
attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
<label for="related_rep" string="Related Medical Representative" attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
<field name="related_rep" |
||||
|
context="{'default_rep':1}" |
||||
|
attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//group[1]/group[1]" position="inside"> |
||||
|
<field name="target" |
||||
|
attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
<field name="total_sale" |
||||
|
attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//div[@name='buttons']" position="inside"> |
||||
|
<button string="Benefits" |
||||
|
name="doctor_exp_btn" |
||||
|
class="oe_stat_button" |
||||
|
icon="fa fa-gift" |
||||
|
type="object" |
||||
|
attrs="{'invisible': [('doctor', '=', False)]}"/> |
||||
|
</xpath> |
||||
|
|
||||
|
|
||||
|
|
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION [DOCTORS]--> |
||||
|
<record id="action_partner_doctor" model="ir.actions.act_window"> |
||||
|
<field name="name">Doctors</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">res.partner</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="context">{"search_default_doctor":1, "default_doctor":1, "default_supplier":0, "default_customer":0}</field> |
||||
|
<field name="search_view_id" ref="base.view_res_partner_filter"/> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="oe_view_nocontent_create"> |
||||
|
Click to add a contact in your address book. |
||||
|
</p><p> |
||||
|
Odoo helps you easily track all activities related to |
||||
|
a doctor. |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--MENU [DOCTORS]--> |
||||
|
<menuitem action="action_partner_doctor" |
||||
|
id="menu_partner_doctor" |
||||
|
sequence="3" |
||||
|
parent="med_marketing.menu_marketing"/> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,217 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--MENU [MARKETING]--> |
||||
|
<menuitem name="Marketing" |
||||
|
id="menu_marketing" |
||||
|
sequence="40" |
||||
|
parent="medical_feature.menu_med_features" |
||||
|
groups="medical_feature.group_medical_user" /> |
||||
|
<!--DEPARTMENT IN PRODUCT--> |
||||
|
<record model="ir.ui.view" id="product_template_view_inherited"> |
||||
|
<field name="name">product.template.form.inherited</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_only_form_view"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='type']" position="before"> |
||||
|
<field string="Uses in" name="uses_in" widget="many2many_tags"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--TREE VIEW [DEPARTMENTS]--> |
||||
|
<record model="ir.ui.view" id="view_departments_tree"> |
||||
|
<field name="name">pha_marketing.departments.tree</field> |
||||
|
<field name="model">pha_marketing.departments</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name" required="1"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--FORM VIEW [DEPARTMENTS]--> |
||||
|
<record model="ir.ui.view" id="view_departments_form"> |
||||
|
<field name="name">pha_marketing.departments.form</field> |
||||
|
<field name="model">pha_marketing.departments</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name" required="1"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION [DEPARTMENTS]--> |
||||
|
<record id="action_departments" model="ir.actions.act_window"> |
||||
|
<field name="name">Departments</field> |
||||
|
<field name="res_model">pha_marketing.departments</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--MENU [DEPARTMENTS]--> |
||||
|
<menuitem action="action_departments" |
||||
|
id="menu_departments" parent="medical_feature.menu_med_conf" |
||||
|
sequence="2"/> |
||||
|
<!--KANBEN [RES.PARTNER] OVERRIDDEN--> |
||||
|
<record model="ir.ui.view" id="base.res_partner_kanban_view"> |
||||
|
<field name="name">res.partner.kanban</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<kanban> |
||||
|
<field name="color"/> |
||||
|
<field name="display_name"/> |
||||
|
<field name="title"/> |
||||
|
<field name="email"/> |
||||
|
<field name="parent_id"/> |
||||
|
<field name="is_company"/> |
||||
|
<field name="function"/> |
||||
|
<field name="phone"/> |
||||
|
<field name="street"/> |
||||
|
<field name="street2"/> |
||||
|
<field name="zip"/> |
||||
|
<field name="city"/> |
||||
|
<field name="country_id"/> |
||||
|
<field name="mobile"/> |
||||
|
<field name="state_id"/> |
||||
|
<field name="category_id"/> |
||||
|
<field name="has_image"/> |
||||
|
<field name="doctor"/> |
||||
|
<field name="target"/> |
||||
|
<field name="total_sale"/> |
||||
|
<field name="related_rep"/> |
||||
|
<field name="specialist_in"/> |
||||
|
<templates> |
||||
|
<t t-name="kanban-box"> |
||||
|
<div style="width: 100%; height:200px;color: navy; background-color: #ffe6f9; border: 2px solid #cc0099; padding: 5px;"> |
||||
|
<table> |
||||
|
<tr> |
||||
|
<td > |
||||
|
<div style="width:20%"> |
||||
|
<div style="width: 30%;" id="div_kanban_border"> |
||||
|
<div class="oe_kanban_vignette oe_semantic_html_override"> |
||||
|
<t t-set="border">oe_kanban_color_red</t> |
||||
|
<a type="open"> |
||||
|
<t t-if="record.has_image.raw_value === true"> |
||||
|
<img t-att-src="kanban_image('res.partner', 'image_small', record.id.value)" class="oe_kanban_image"/> |
||||
|
</t> |
||||
|
<t t-if="record.has_image.raw_value === false"> |
||||
|
<t t-if="record.is_company.raw_value === true"> |
||||
|
<img t-att-src='_s + "/base/static/src/img/company_image.png"' class="oe_kanban_image"/> |
||||
|
</t> |
||||
|
<t t-if="record.is_company.raw_value === false"> |
||||
|
<img t-att-src='_s + "/base/static/src/img/avatar.png"' class="oe_kanban_image"/> |
||||
|
</t> |
||||
|
</t> |
||||
|
</a> |
||||
|
<div class="oe_kanban_details"> |
||||
|
<h4 class="oe_partner_heading"><a type="open"><field name="display_name"/></a></h4> |
||||
|
<h5><field name="specialist_in"/></h5> |
||||
|
<div class="oe_kanban_partner_categories"/> |
||||
|
<div class="oe_kanban_partner_links"/> |
||||
|
<ul> |
||||
|
<li t-if="record.parent_id.raw_value and !record.function.raw_value"><field name="parent_id"/></li> |
||||
|
<li t-if="!record.parent_id.raw_value and record.function.raw_value"><field name="function"/></li> |
||||
|
<li t-if="record.parent_id.raw_value and record.function.raw_value"><field name="function"/> at <field name="parent_id"/></li> |
||||
|
<li t-if="record.city.raw_value and !record.country_id.raw_value"><field name="city"/></li> |
||||
|
<li t-if="!record.city.raw_value and record.country_id.raw_value"><field name="country_id"/></li> |
||||
|
<li t-if="record.city.raw_value and record.country_id.raw_value"><field name="city"/>, <field name="country_id"/></li> |
||||
|
<li t-if="record.email.raw_value"><a t-attf-href="mailto:#{record.email.raw_value}"><field name="email"/></a></li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</td> |
||||
|
|
||||
|
<td> |
||||
|
<div attrs="{'invisible': [('target', '=', 0)]}" style="width: 30%;"> |
||||
|
<div class="oe_center" attrs="{'invisible': [('doctor', '=', False)]}"> |
||||
|
|
||||
|
<field name="total_sale" widget="gauge" style="width:120px; height: 90px; cursor: pointer;" |
||||
|
options="{'max_field': 'target'}">Doctor Target</field> |
||||
|
|
||||
|
<h5 style="color:black;">Related Rep.</h5> |
||||
|
<field name="related_rep" string="Related Rep."/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</div> |
||||
|
|
||||
|
</t> |
||||
|
</templates> |
||||
|
</kanban> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--KANBEN [HR.EMPLOYEE] OVERRIDDEN--> |
||||
|
<record model="ir.ui.view" id="hr.hr_kanban_view_employees"> |
||||
|
<field name="name">HR - Employess Kanban</field> |
||||
|
<field name="model">hr.employee</field> |
||||
|
<field name="priority">10</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<kanban> |
||||
|
<field name="last_login"/> |
||||
|
<field name="message_is_follower"/> |
||||
|
<field name="message_follower_ids"/> |
||||
|
<field name="message_ids"/> |
||||
|
<field name="rep"/> |
||||
|
<field name="target"/> |
||||
|
<field name="total_sale"/> |
||||
|
<templates> |
||||
|
<t t-name="kanban-box"> |
||||
|
<div style="width: 100%; height:200px;color: navy; background-color: #cce0ff; border: 2px solid #0066ff; padding: 5px;"> |
||||
|
<div class="oe_employee_vignette"> |
||||
|
<div class="oe_employee_image"> |
||||
|
<a type="open"><img t-att-src="kanban_image('hr.employee', 'image_medium', record.id.value)" class="oe_employee_picture"/></a> |
||||
|
</div> |
||||
|
<div class="oe_employee_details"> |
||||
|
<h4> |
||||
|
<a type="open"><field name="name"/><t t-if="record.login.raw_value"> (<field name="login"/>)</t></a> |
||||
|
</h4> |
||||
|
<ul> |
||||
|
<li id="last_login"> |
||||
|
<span t-if="record.last_login.raw_value && record.last_login.raw_value.is().today()" class="oe_kanban_button" style="font-size: 100%%"> |
||||
|
<t t-esc="record.last_login.raw_value.toString('HH:mm')"/> |
||||
|
</span> |
||||
|
</li> |
||||
|
<li t-if="record.job_id.raw_value"><field name="job_id"/></li> |
||||
|
<li t-if="record.work_location.raw_value"><field name="work_location"/></li> |
||||
|
<li t-if="record.work_email.raw_value"><a t-attf-href="mailto:#{record.work_email.value}"><field name="work_email"/></a></li> |
||||
|
</ul> |
||||
|
<div class="oe_kanban_footer_left"> |
||||
|
<div attrs="{'invisible': [('target', '=', 0)]}"> |
||||
|
<div class="oe_center" attrs="{'invisible': [('rep', '=', False)]}"> |
||||
|
<field name="total_sale" widget="gauge" style="width:120px; height: 90px; cursor: pointer;" |
||||
|
options="{'max_field': 'target'}">Rep Target</field> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<span title='Messages'><span class='oe_e'>9</span><t t-esc="record.message_ids.raw_value.length"/></span> |
||||
|
<span title='Followers'><span class='oe_e'>+</span><t t-esc="record.message_follower_ids.raw_value.length"/></span> |
||||
|
</div> |
||||
|
<div class="oe_followers" groups="base.group_user"> |
||||
|
<button t-if="record.message_is_follower.raw_value" name="action_unfollow" type="object" class="oe_follower oe_following"> |
||||
|
<span class="oe_unfollow">Unfollow</span> |
||||
|
<span class="oe_following">Following</span> |
||||
|
</button> |
||||
|
<button t-if="! record.message_is_follower.raw_value" name="action_follow" type="object" class="oe_follower oe_notfollow">Follow</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script> |
||||
|
$('.oe_employee_picture').load(function() { if($(this).width() > $(this).height()) { $(this).addClass('oe_employee_picture_wide') } }); |
||||
|
</script> |
||||
|
</t> |
||||
|
</templates> |
||||
|
</kanban> |
||||
|
|
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,63 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--SEARCH[EMPLOYEE]--> |
||||
|
<record id="view_employee_filter" model="ir.ui.view"> |
||||
|
<field name="name">Employees</field> |
||||
|
<field name="model">hr.employee</field> |
||||
|
<field name="inherit_id" ref="hr.view_employee_filter"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//group[@string='Group By']" position="before"> |
||||
|
<filter name="filter_rep" string="Medical Representative" icon="terp-personal+" domain="[('rep', '=', True)]"/> |
||||
|
<separator/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--FORM [EMPLOYEE]--> |
||||
|
<record id="view_employee_form_inherit" model="ir.ui.view"> |
||||
|
<field name="name">hr.employee.form.inherit</field> |
||||
|
<field name="model">hr.employee</field> |
||||
|
<field name="inherit_id" ref="hr.view_employee_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//label[@for='name']" position="before"> |
||||
|
<h4> |
||||
|
<field name="rep" class="oe_inline"/> <label for="rep" string="Is a Medical Representative?"/> |
||||
|
</h4> |
||||
|
<br/> |
||||
|
</xpath> |
||||
|
<xpath expr="//group[@name='active_group']" position="after"> |
||||
|
<group string="Commission" attrs="{'invisible':[('rep','=',False)]}"> |
||||
|
<field name="commission" /> |
||||
|
</group> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION [REP]--> |
||||
|
<record id="action_rep" model="ir.actions.act_window"> |
||||
|
<field name="name">Medical Representatives</field> |
||||
|
<field name="res_model">hr.employee</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="domain">[]</field> |
||||
|
<field name="context">{"search_default_filter_rep":1, "default_rep":1}</field> |
||||
|
<field name="view_id" eval="False"/> |
||||
|
<field name="search_view_id" ref="hr.view_employee_filter"/> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="oe_view_nocontent_create"> |
||||
|
Click to add a new employee. |
||||
|
</p><p> |
||||
|
With just a quick glance on the Odoo employee screen, you |
||||
|
can easily find all the information you need for each person; |
||||
|
contact data, job position, availability, etc. |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--MENU [REP]--> |
||||
|
<menuitem action="action_rep" |
||||
|
id="menu_rep" |
||||
|
sequence="4" |
||||
|
parent="med_marketing.menu_marketing"/> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1 @@ |
|||||
|
import pharmacy_mgt,route_manage,expiry_manage |
@ -0,0 +1,28 @@ |
|||||
|
{ |
||||
|
'name': "Pharmacy Management", |
||||
|
'summary': """ Some Basics For Field of Medicine """, |
||||
|
'description': """ """, |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'license': 'AGPL-3', |
||||
|
'category': 'Medicine', |
||||
|
'version': '0.1', |
||||
|
'depends': ["base", |
||||
|
"sale", |
||||
|
"purchase", |
||||
|
"stock", |
||||
|
"mrp", |
||||
|
"mrp_operations", |
||||
|
"product_expiry", |
||||
|
"account_accountant"], |
||||
|
'data': ['views/pharmacy_mgt_view.xml', |
||||
|
'views/medicines_view.xml', |
||||
|
'route_manage/route_manage_view.xml', |
||||
|
'route_manage/report.xml', 'new_names.xml', |
||||
|
'expiry_manage/expiry_manage_view.xml', |
||||
|
], |
||||
|
'demo': ['demo/demo.xml'], |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': True, |
||||
|
} |
@ -0,0 +1,335 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--DEMO LOCATIONS--> |
||||
|
<!--CALICUT--> |
||||
|
<record id="loc_0001" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Sm street</field> |
||||
|
</record> |
||||
|
<record id="loc_0002" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Manorama Junction</field> |
||||
|
</record> |
||||
|
<record id="loc_0003" model="pharmacy_management.route.location"> |
||||
|
<field name="name">East Nadakavu Junction</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0004" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Sarovaram</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0005" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Mavoor Road</field> |
||||
|
</record> |
||||
|
<!--HYDERABAD--> |
||||
|
<record id="loc_0011" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Malakunta</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0012" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Gruhkalpa</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0013" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Band colony</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0014" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Sultan Bazaar</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0015" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Esamiya Bazaar</field> |
||||
|
</record> |
||||
|
<!--CHENNAI--> |
||||
|
<record id="loc_0021" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Royapettah</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0022" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Teynampet</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0023" model="pharmacy_management.route.location"> |
||||
|
<field name="name">T Nagar</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0024" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Kodambakkam</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0025" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Arumbakkam</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--KOLKATHA--> |
||||
|
|
||||
|
<record id="loc_0051" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Lal Bazaar</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="loc_0052" model="pharmacy_management.route.location"> |
||||
|
<field name="name">Bow Bazaar</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--DEMO DATA FOR MEDICINE TYPES--> |
||||
|
<!--<record id="medicine_types-dat" model="product.medicine.types">--> |
||||
|
<!--<field name="id">1</field>--> |
||||
|
<!--<field name="medicine_type">Antibiotic</field>--> |
||||
|
<!--</record>--> |
||||
|
|
||||
|
<!--<record id="medicine_types-dat1" model="product.medicine.types">--> |
||||
|
<!--<field name="id">2</field>--> |
||||
|
<!--<field name="medicine_type">Pathogen</field>--> |
||||
|
<!--</record>--> |
||||
|
|
||||
|
<!--<record id="medicine_types-dat2" model="product.medicine.types">--> |
||||
|
<!--<field name="id">3</field>--> |
||||
|
<!--<field name="medicine_type">Cells</field>--> |
||||
|
<!--</record>--> |
||||
|
|
||||
|
<!--DEMO MEDICINES--> |
||||
|
<!--ANTIBIOTICS--> |
||||
|
<!--<record id="medicine1" model="product.product">--> |
||||
|
<!--<field name="name">Daptomycin</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine2" model="product.product">--> |
||||
|
<!--<field name="name">Linezolid</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine3" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000003</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<!–PATHOGENS–>--> |
||||
|
<!--<record id="medicine4" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000004</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat1"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine5" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000005</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat1"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine6" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000006</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat1"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<!–CELLS–>--> |
||||
|
<!--<record id="medicine7" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000007</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat2"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine8" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000008</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat2"/>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="medicine9" model="product.product">--> |
||||
|
<!--<field name="name">XXXXXXXXXXX0000009</field>--> |
||||
|
<!--<field name="standard_price">10.0</field>--> |
||||
|
<!--<field name="list_price">10.0</field>--> |
||||
|
<!--<field name="medicine_type" ref="medicine_types-dat2"/>--> |
||||
|
<!--</record>--> |
||||
|
|
||||
|
<!--DEMO ROUTES--> |
||||
|
<record id="route1" model="pharmacy_management.route"> |
||||
|
<field name="name">Kolkata</field> |
||||
|
<field name="route_code">KLT</field> |
||||
|
<field name="distributor" ref="base.user_root"/> |
||||
|
<field name="location_list1" eval="[(6, 0, [ref('loc_0051'), ref('loc_0052')])]"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="route2" model="pharmacy_management.route"> |
||||
|
<field name="name">Mumbai</field> |
||||
|
<field name="route_code">MBI</field> |
||||
|
<field name="distributor" ref="base.user_demo"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="route3" model="pharmacy_management.route"> |
||||
|
<field name="name">New Delhi</field> |
||||
|
<field name="route_code">DLH</field> |
||||
|
<field name="distributor" ref="base.user_demo"/> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<record id="route4" model="pharmacy_management.route"> |
||||
|
<field name="name">Chennai</field> |
||||
|
<field name="route_code">CHN</field> |
||||
|
<field name="distributor" ref="base.user_root"/> |
||||
|
<field name="location_list1" eval="[(6, 0, [ref('loc_0021'), ref('loc_0022'), ref('loc_0023'),ref('loc_0024'),ref('loc_0025')])]"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="route5" model="pharmacy_management.route"> |
||||
|
<field name="name">Hyderabad</field> |
||||
|
<field name="route_code">HBD</field> |
||||
|
<field name="distributor" ref="base.user_root"/> |
||||
|
<field name="location_list1" eval="[(6, 0, [ref('loc_0011'), ref('loc_0012'), ref('loc_0013'),ref('loc_0014'),ref('loc_0015')])]"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="route6" model="pharmacy_management.route"> |
||||
|
<field name="name">Calicut</field> |
||||
|
<field name="route_code">CLT</field> |
||||
|
<field name="distributor" ref="base.user_root"/> |
||||
|
<field name="location_list1" eval="[(6, 0, [ref('loc_0001'), ref('loc_0002'), ref('loc_0003'),ref('loc_0004'),ref('loc_0005')])]"/> |
||||
|
</record> |
||||
|
|
||||
|
<!--DEMO MEDICINE TYPES--> |
||||
|
<record id="medicine_types_1" model="product.medicine.types"> |
||||
|
<field name="id">11</field> |
||||
|
<field name="medicine_type">Eye</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_2" model="product.medicine.types"> |
||||
|
<field name="id">12</field> |
||||
|
<field name="medicine_type">Ear, Nose and Oropharynx</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_3" model="product.medicine.types"> |
||||
|
<field name="id">13</field> |
||||
|
<field name="medicine_type">Skin</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_4" model="product.medicine.types"> |
||||
|
<field name="id">14</field> |
||||
|
<field name="medicine_type">Infections and Infestations</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_5" model="product.medicine.types"> |
||||
|
<field name="id">15</field> |
||||
|
<field name="medicine_type">Allergic disorders</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_6" model="product.medicine.types"> |
||||
|
<field name="id">16</field> |
||||
|
<field name="medicine_type">Gastrointestinal tract</field> |
||||
|
</record> |
||||
|
<record id="medicine_types_7" model="product.medicine.types"> |
||||
|
<field name="id">17</field> |
||||
|
<field name="medicine_type">Nutrition</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--DEMO MEDICINES--> |
||||
|
|
||||
|
<record id="medicines_001" model="product.product"> |
||||
|
<field name="name">Acetylcysteine</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_1"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/Acetylcysteine.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_00555" model="product.product"> |
||||
|
<field name="name">Carbomer Liquid Eye Gels</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_1"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/Carbomer_liquid_eye_gels.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<record id="medicines_002" model="product.product"> |
||||
|
<field name="name">Azithromycin</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_1"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/Azithromycin.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_003" model="product.product"> |
||||
|
<field name="name">Amoxicillin</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_2"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/er_amoxicillin-1.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<record id="medicines_004" model="product.product"> |
||||
|
<field name="name">Clarithromycin</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_2"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/re_clarithromycin.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_005" model="product.product"> |
||||
|
<field name="name">Celiprolol</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_5"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/allr_Celiprolol.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_006" model="product.product"> |
||||
|
<field name="name">Cetirizine</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_5"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/allr_Cetirizine.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_007" model="product.product"> |
||||
|
<field name="name">Dimethindene</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_5"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/allr_Dimethindene.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="medicines_008" model="product.product"> |
||||
|
<field name="name">Aciphex</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_6"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/gs_Aciphex.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="9" model="product.product"> |
||||
|
<field name="name">Gastrogafin</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_6"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/gs_gastrogafin.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="10" model="product.product"> |
||||
|
<field name="name">Gleevec</field> |
||||
|
<field name="standard_price">10.0</field> |
||||
|
<field name="list_price">10.0</field> |
||||
|
<field name="medicine_type" ref="medicine_types_6"/> |
||||
|
<field name="image" type="base64" file="medical_feature/static/img/gs_Gleevec.jpg"/> |
||||
|
</record> |
||||
|
|
||||
|
<!--DEMO LOTS--> |
||||
|
|
||||
|
<record id="lot_0001" model="stock.production.lot"> |
||||
|
<field name="name">AE00G5K220001</field> |
||||
|
<field name="product_id" ref="medicines_001"/> |
||||
|
<field name="use_date" eval="time.strftime('%Y-%m') + '-08'"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="lot_0002" model="stock.production.lot"> |
||||
|
<field name="name">AE00G5K220002</field> |
||||
|
<field name="product_id" ref="medicines_002"/> |
||||
|
<field name="life_date" eval="time.strftime('%Y-%m') + '-10'"/> |
||||
|
</record> |
||||
|
|
||||
|
<record id="lot_0003" model="stock.production.lot"> |
||||
|
<field name="name">AE00G5K220003</field> |
||||
|
<field name="product_id" ref="medicines_002"/> |
||||
|
<field name="life_date" eval="time.strftime('%Y-%m') + '-11'"/> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1 @@ |
|||||
|
import expiry_manage |
@ -0,0 +1,52 @@ |
|||||
|
from openerp import models, fields, _ |
||||
|
from openerp import api |
||||
|
import datetime |
||||
|
from dateutil import parser |
||||
|
|
||||
|
|
||||
|
class StockTransferDetailsItems(models.TransientModel): |
||||
|
_inherit = 'stock.transfer_details_items' |
||||
|
|
||||
|
lot_id = fields.Many2one('stock.production.lot', 'Lot/Serial Number') |
||||
|
|
||||
|
@api.onchange('lot_id') |
||||
|
def when_items_changes_(self): |
||||
|
# ALERT DATE [alert_date] |
||||
|
if self.lot_id.alert_date is not False and parser.parse(self.lot_id.alert_date) < datetime.datetime.now(): |
||||
|
return {'warning': {'title': _('Warning'), 'message': _('The lot \''+self.lot_id.name+'\' of '+' medicine \''+self.lot_id.product_id.name+'\'\n must not be consumed and should be removed from the stock.')}} |
||||
|
# REMOVAL DATE [removal_date] |
||||
|
if self.lot_id.removal_date is not False and parser.parse(self.lot_id.removal_date) < datetime.datetime.now(): |
||||
|
return {'warning': {'title': _('Warning'), 'message': _('The lot \''+self.lot_id.name+'\' of '+' medicine \''+self.lot_id.product_id.name+'\'\n must not be consumed and should be removed from the stock.')}} |
||||
|
# END OF LIFE DATE [life_date] |
||||
|
if self.lot_id.life_date is not False and parser.parse(self.lot_id.life_date) < datetime.datetime.now(): |
||||
|
return {'warning': {'title': _('Warning'), 'message': _('The lot \''+self.lot_id.name+'\' of '+' medicine \''+self.lot_id.product_id.name+'\'\n is dangerous and must not be consumed.')}} |
||||
|
# BEST BEFORE DATE [use_date] |
||||
|
if self.lot_id.use_date is not False and parser.parse(self.lot_id.use_date) < datetime.datetime.now(): |
||||
|
return {'warning': {'title': _('Warning'), 'message': _('The lot \''+self.lot_id.name+'\' of '+' medicine \''+self.lot_id.product_id.name+'\'\n is not good for use now.')}} |
||||
|
|
||||
|
|
||||
|
class AddColorSerialNo(models.Model): |
||||
|
_inherit = 'stock.production.lot' |
||||
|
|
||||
|
def _get_default_vals(self): |
||||
|
for each_lots in self: |
||||
|
if each_lots.alert_date is not False and parser.parse(each_lots.alert_date) < datetime.datetime.now(): |
||||
|
each_lots.state = 'red' |
||||
|
elif each_lots.removal_date is not False and parser.parse(each_lots.removal_date) < datetime.datetime.now(): |
||||
|
each_lots.state = 'red' |
||||
|
elif each_lots.life_date is not False and parser.parse(each_lots.life_date) < datetime.datetime.now(): |
||||
|
each_lots.state = 'red' |
||||
|
elif each_lots.use_date is not False and parser.parse(each_lots.use_date) < datetime.datetime.now(): |
||||
|
each_lots.state = 'lite_red' |
||||
|
else: |
||||
|
each_lots.state = 'normal' |
||||
|
|
||||
|
|
||||
|
state = fields.Selection([('normal', 'Normal'), |
||||
|
('lite_red', 'Not Good'), |
||||
|
('red', 'To Be Removed')], |
||||
|
string='Status', |
||||
|
compute=lambda self: self._get_default_vals() |
||||
|
# default=lambda self: self._get_default_vals() |
||||
|
) |
||||
|
|
@ -0,0 +1,56 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--TREE [LOTS]--> |
||||
|
<record id="stock.view_production_lot_tree" model="ir.ui.view"> |
||||
|
<field name="name">stock.production.lot.tree</field> |
||||
|
<field name="model">stock.production.lot</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree string="Serial Number" colors="red:state=='red';#ff8080:state=='lite_red'"> |
||||
|
<field name="name"/> |
||||
|
<field name="ref"/> |
||||
|
<field name="product_id"/> |
||||
|
<field name="create_date"/> |
||||
|
<field name="state"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--SEARCH [LOTS]--> |
||||
|
<record model="ir.ui.view" id="search_med_lot_filter"> |
||||
|
<field name="name">Production Lots Filter</field> |
||||
|
<field name="model">stock.production.lot</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<search string="Product Lots Filter"> |
||||
|
<field name="name" string="Product Lots" filter_domain="['|',('name','ilike',self),('ref','ilike',self)]"/> |
||||
|
<field name="product_id"/> |
||||
|
<group expand="0" string="Group By"> |
||||
|
<filter string="Medicines" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/> |
||||
|
</group> |
||||
|
</search> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION [LOTS]--> |
||||
|
<record id="action_med_lot" model="ir.actions.act_window"> |
||||
|
<field name="name">Serial Numbers</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">stock.production.lot</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="stock.view_production_lot_tree"/> |
||||
|
<field name="search_view_id" ref="search_med_lot_filter"/> |
||||
|
<field name="context">{}</field> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="oe_view_nocontent_create"> |
||||
|
Click to add a serial number. |
||||
|
</p><p> |
||||
|
This is the list of all the production lots you recorded. When |
||||
|
you select a lot, you can get the traceability of the products contained in lot. |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--MENU [LOTS]--> |
||||
|
<menuitem action="action_med_lot" id="menu_action_med_lot_form" |
||||
|
parent="medical_feature.menu_med" |
||||
|
sequence="40" |
||||
|
groups="stock.group_production_lot"/> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,170 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--IN SALES--> |
||||
|
|
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="base.menu_partner_form"> |
||||
|
<field name="name">Retailers</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="base.action_partner_form" model="ir.actions.act_window"> |
||||
|
<field name="name">Retailers</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
|
||||
|
<!--QUOTATIONS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="sale.menu_sale_quotations"> |
||||
|
<field name="name">Draft Orders</field> |
||||
|
</record> |
||||
|
<record id="sale.action_quotations" model="ir.actions.act_window"> |
||||
|
<field name="name">Draft Orders</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--SALE ORDERS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="sale.menu_sale_order"> |
||||
|
<field name="name">Confirmed Orders</field> |
||||
|
</record> |
||||
|
<record id="sale.action_orders" model="ir.actions.act_window"> |
||||
|
<field name="name">Confirmed Orders</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCTS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="base.menu_product"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="product.menu_product_template_action"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<record id="product.product_template_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCT VARIANTS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="product.menu_products"> |
||||
|
<field name="name">Medicines Variants</field> |
||||
|
</record> |
||||
|
<record id="product.product_normal_action_sell" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines Variants</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCT BY CATEGORY--> |
||||
|
<!--<record model="ir.ui.menu" id="product.menu_products_category">--> |
||||
|
<!--<field name="name">Medicines by Category</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="product.product_category_action" model="ir.actions.act_window">--> |
||||
|
<!--<field name="name">Medicines by Category</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--=====================================================--> |
||||
|
<!--IN PURCHASE--> |
||||
|
|
||||
|
<!--=====================================================--> |
||||
|
<!--REQUESTS FOR QUOTATIONS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="purchase.menu_purchase_rfq"> |
||||
|
<field name="name">Draft Orders</field> |
||||
|
</record> |
||||
|
<record id="purchase.purchase_rfq" model="ir.actions.act_window"> |
||||
|
<field name="name">Draft Orders</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PURCHASE ORDERS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="purchase.menu_purchase_form_action"> |
||||
|
<field name="name">Confirmed Orders</field> |
||||
|
</record> |
||||
|
<record id="purchase.purchase_form_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Confirmed Orders</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--SUPPLIERS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="base.menu_procurement_management_supplier_name"> |
||||
|
<field name="name">Vendors</field> |
||||
|
</record> |
||||
|
<record id="base.action_partner_supplier_form" model="ir.actions.act_window"> |
||||
|
<field name="name">Vendors</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCTS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="purchase.menu_procurement_management_product"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="purchase.menu_procurement_partner_contact_form"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<record id="purchase.product_normal_action_puchased" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCTS BY CATEGORY--> |
||||
|
<!--=====================================================--> |
||||
|
<!--<record model="ir.ui.menu" id="purchase.menu_product_by_category_purchase_form">--> |
||||
|
<!--<field name="name">Medicines by Category</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="product.product_category_action" model="ir.actions.act_window">--> |
||||
|
<!--<field name="name">Medicines by Category</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--=====================================================--> |
||||
|
<!--MESSAGING--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="mail.mail_feeds_main"> |
||||
|
<field name="name">Talks</field> |
||||
|
</record> |
||||
|
<!--WAREHOUSE--> |
||||
|
<!--=====================================================--> |
||||
|
<!--WAREHOUSE [TOP]--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="stock.menu_stock_root"> |
||||
|
<field name="name"> Stocks </field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="stock.menu_stock_product"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--<record model="ir.ui.menu" id="stock.menu_product_by_category_stock_form">--> |
||||
|
<!--<field name="name">Medicines by Category</field>--> |
||||
|
<!--</record>--> |
||||
|
<record model="ir.ui.menu" id="stock.menu_stock_products_menu"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--MANUFACTURING--> |
||||
|
|
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCTS--> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="mrp.menu_mrp_bom"> |
||||
|
<field name="name"> Medicines </field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
<record model="ir.ui.menu" id="mrp.menu_mrp_product_form"> |
||||
|
<field name="name"> Medicines </field> |
||||
|
</record> |
||||
|
<record id="mrp.product_template_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines</field> |
||||
|
</record> |
||||
|
<!--=====================================================--> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
<!--=====================================================--> |
||||
|
<!--PRODUCT BY CATEGORY--> |
||||
|
<!--<record model="ir.ui.menu" id="product.menu_products_category">--> |
||||
|
<!--<field name="name">Medicines Hierarchy</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--<record id="product.product_category_action" model="ir.actions.act_window">--> |
||||
|
<!--<field name="name">Medicines Hierarchy</field>--> |
||||
|
<!--</record>--> |
||||
|
<!--=====================================================--> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,32 @@ |
|||||
|
from openerp import models, fields,api |
||||
|
|
||||
|
|
||||
|
class Medicines(models.Model): |
||||
|
_inherit = 'product.template' |
||||
|
|
||||
|
medicine_category = fields.Selection([('allopathy', 'Allopathy'), |
||||
|
('ayurvedic', 'Ayurvedic'), |
||||
|
('homeo', 'Homeo'), |
||||
|
('generic', 'Generic'), |
||||
|
('none', 'None Medicine'), |
||||
|
('veterinary', 'Veterinary'), ], 'Medicine Type', default='generic') |
||||
|
medicine_type = fields.Many2one('product.medicine.types', 'Medicine Category') |
||||
|
product_of = fields.Many2one('product.medicine.responsible', 'Product Of') |
||||
|
|
||||
|
|
||||
|
class MedicineTypes(models.Model): |
||||
|
_name = 'product.medicine.types' |
||||
|
_rec_name = 'medicine_type' |
||||
|
|
||||
|
medicine_type = fields.Char(string="Medicine Category") |
||||
|
|
||||
|
|
||||
|
class MedicineResponsible(models.Model): |
||||
|
_name = 'product.medicine.responsible' |
||||
|
_rec_name = 'name_responsible' |
||||
|
|
||||
|
name_responsible = fields.Char(string="Product Of ") |
||||
|
related_vendor = fields.Many2one('res.partner', string='Related Vendor', domain="[('supplier', '=','1')]") |
||||
|
place = fields.Char(string="Place") |
||||
|
|
||||
|
|
@ -0,0 +1 @@ |
|||||
|
import route_mgt |
@ -0,0 +1,30 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--PIVOT VIEW OF REPORT--> |
||||
|
<record id="view_report_sale_order_graph" model="ir.ui.view"> |
||||
|
<field name="name">sale.order.route</field> |
||||
|
<field name="model">sale.order</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<graph string="Sale Orders By Route" type="pivot"> |
||||
|
<field name="name" type="col"/> |
||||
|
<field name="amount_total" type="measure"/> |
||||
|
<field name="route_of_customer" type="row"/> |
||||
|
</graph> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION OF REPORT--> |
||||
|
<record id="action_sale_order_by_route" model="ir.actions.act_window"> |
||||
|
<field name="name">Sales Analysis By Routes</field> |
||||
|
<field name="res_model">sale.order</field> |
||||
|
<!--<field name="view_type">form</field>--> |
||||
|
<field name="view_mode">graph</field> |
||||
|
<field name="view_id" ref="view_report_sale_order_graph"/> |
||||
|
</record> |
||||
|
|
||||
|
<menuitem action="action_sale_order_by_route" |
||||
|
id="menu_report_by_route" |
||||
|
parent="base.next_id_64" |
||||
|
sequence="10"/> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,237 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--KANBAN VIEW OF ROUTES--> |
||||
|
<record id="medical_feature.view_my_route_kanban" model="ir.ui.view"> |
||||
|
<field name="name">pharmacy_management.route.kanban</field> |
||||
|
<field name="model">pharmacy_management.route</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<kanban> |
||||
|
<field name="name"/> |
||||
|
<field name="route_code"/> |
||||
|
<field name="distributor"/> |
||||
|
<field name="customer_list"/> |
||||
|
<field name="count_customers"/> |
||||
|
<!--<field name="location_list"/>--> |
||||
|
<templates> |
||||
|
<t t-name="kanban-box"> |
||||
|
<a type="open"> |
||||
|
<div style="width: 300px;color: navy; background-color: #E0E0E0; border: 2px solid #4C4C4C; padding: 5px;"> |
||||
|
<h4 style="color:#c2c2d6;"> |
||||
|
<field name="route_code"/> |
||||
|
</h4> |
||||
|
<h2 style="color:#4C4C4C;"> |
||||
|
<field name="name"/> |
||||
|
</h2> |
||||
|
<center> |
||||
|
<div style="color:#000000;"> |
||||
|
<field name="distributor"/> |
||||
|
</div> |
||||
|
</center> |
||||
|
<span class="oe_kanban_list_many2many"> |
||||
|
<field name="location_list1"/> |
||||
|
</span> |
||||
|
|
||||
|
|
||||
|
<div align="right" style="color:#7C7BAD;"> |
||||
|
<field name="count_customers"/> |
||||
|
<label>Retailers</label> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</t> |
||||
|
</templates> |
||||
|
</kanban> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--SEARCH VIEW OF ROUTES--> |
||||
|
<record id="medical_feature.view_my_route_filter" model="ir.ui.view"> |
||||
|
<field name="name">pharmacy_management.route.select</field> |
||||
|
<field name="model">pharmacy_management.route</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<search> |
||||
|
<filter string="My" name="my_route" domain="[('distributor','=',uid)]"/> |
||||
|
</search> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION FOR ROUTES MENU--> |
||||
|
<record id="routes_menu_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Routes</field> |
||||
|
<field name="res_model">pharmacy_management.route</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="context">{"search_default_my_route":1}</field> |
||||
|
<field name="search_view_id" ref="view_my_route_filter"/> |
||||
|
</record> |
||||
|
<!-- TREE VIEW FOR ROUTES MENU--> |
||||
|
<record model="ir.ui.view" id="routes_menu_tree_view"> |
||||
|
<field name="name">pharmacy_management.route.tree</field> |
||||
|
<field name="model">pharmacy_management.route</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="distributor"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!-- FORM VIEW FOR ROUTES MENU--> |
||||
|
<record model="ir.ui.view" id="routes_menu_form_view"> |
||||
|
<field name="name">pharmacy_management.route.form</field> |
||||
|
<field name="model">pharmacy_management.route</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<table> |
||||
|
<tr> |
||||
|
<td> |
||||
|
<group> |
||||
|
<field name="name" required="1" string="Route"/> |
||||
|
<field name="route_code" string="Route Code"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="distributor" required="1" string="Distributor"/> |
||||
|
</group> |
||||
|
</td> |
||||
|
<td> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
<notebook> |
||||
|
<page string="Retailer"> |
||||
|
<field name="customer_list" readonly="1"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
<field name="mobile"/> |
||||
|
<field name="email"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</page> |
||||
|
<page string="Locations"> |
||||
|
<group col="2"> |
||||
|
<div> |
||||
|
<group> |
||||
|
<field name="location_list1" widget="many2many_tags"/> |
||||
|
</group> |
||||
|
</div> |
||||
|
<div> |
||||
|
<button string="All Locations" |
||||
|
name="locations_btn" |
||||
|
icon="fa fa-arrow-right" |
||||
|
class="oe_stat_button" |
||||
|
type="object"/> |
||||
|
</div> |
||||
|
</group> |
||||
|
</page> |
||||
|
</notebook> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<!--MENU ROUTES--> |
||||
|
|
||||
|
|
||||
|
<menuitem action="routes_menu_action" |
||||
|
id="distributing_routes" |
||||
|
sequence="1" |
||||
|
parent="medical_feature.menu_med_sale"/> |
||||
|
|
||||
|
<!--ADD THE FIELD ROUTE IN CUSTOMER DATA --> |
||||
|
<record id="res_partner_route" model="ir.ui.view"> |
||||
|
<field name="name">res.partner.route</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base.view_partner_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='parent_id']" position="before"> |
||||
|
<label for="customer_route" string="Route" attrs="{'invisible': [('customer','=',False)]}"/> |
||||
|
<field name="customer_route" |
||||
|
attrs="{'invisible': [('customer','=',False)]}" |
||||
|
/> |
||||
|
<field name="id_of_route_distributor" attrs="{'invisible': True}"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ADD THE FIELD ROUTE OF CUSTOMER IN SALE ORDER --> |
||||
|
<record id="sale_order_customer_route" model="ir.ui.view"> |
||||
|
<field name="name">sale.order.customer_route</field> |
||||
|
<field name="model">sale.order</field> |
||||
|
<field name="inherit_id" ref="sale.view_order_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='partner_id']" position="after"> |
||||
|
<field name="route_of_customer" attrs="{'invisible':True}"/> |
||||
|
<field name="route_of_customer_to_show"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION TO OVERRIDE THE CUSTOMER MENU--> |
||||
|
<record id="base.action_partner_form" model="ir.actions.act_window"> |
||||
|
<field name="name">Retailers</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">res.partner</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="context">{"search_default_customer":1 ,"search_default_my_retailers":1}</field> |
||||
|
<field name="search_view_id" ref="base.view_res_partner_filter"/> |
||||
|
<field name="help" type="html"> |
||||
|
<p class="oe_view_nocontent_create"> |
||||
|
Click to add a contact in your address book. |
||||
|
</p><p> |
||||
|
Odoo helps you easily track all activities related to |
||||
|
a customer; discussions, history of business opportunities, |
||||
|
documents, etc. |
||||
|
</p> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ADDING 'MY RETAILER' FILTER--> |
||||
|
<record model="ir.ui.view" id="res_partner_search_inherited"> |
||||
|
<field name="name">res.partner.serach</field> |
||||
|
<field name="model">res.partner</field> |
||||
|
<field name="inherit_id" ref="base.view_res_partner_filter"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='name']" position="before"> |
||||
|
<filter string="My Retailers" name="my_retailers" domain="[('id_of_route_distributor','=',uid)]"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--Give CONTEXT FOR CUSTOMER IN FORM VIEW OF SALE ORDER--> |
||||
|
<record model="ir.ui.view" id="view_order_form_inherit_latest"> |
||||
|
<field name="name">sale.order.form.inherit269</field> |
||||
|
<field name="model">sale.order</field> |
||||
|
<field name="inherit_id" ref="sale.view_order_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr='//field[@name="partner_id"]' position='attributes'> |
||||
|
<attribute name="domain">[('customer','=',True), ('id_of_route_distributor','=',uid)]</attribute> |
||||
|
<attribute name="context">{'search_default_customer':1, 'show_address': 1, 'search_default_my_retailers': 1 }</attribute> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--TREE [LOCATIONS]--> |
||||
|
<record model="ir.ui.view" id="routes_locations_menu_tree_view"> |
||||
|
<field name="name">pharmacy_management.route.location.tree</field> |
||||
|
<field name="model">pharmacy_management.route.location</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--FORM [LOCATIONS]--> |
||||
|
<record model="ir.ui.view" id="routes_locations_menu_form_view"> |
||||
|
<field name="name">pharmacy_management.route.location.form</field> |
||||
|
<field name="model">pharmacy_management.route.location</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,89 @@ |
|||||
|
from openerp import models, fields,_ |
||||
|
from openerp import api |
||||
|
|
||||
|
|
||||
|
# ROUTE |
||||
|
class DistributionRoutes(models.Model): |
||||
|
_name = 'pharmacy_management.route' |
||||
|
|
||||
|
name = fields.Char('Route Name') |
||||
|
route_code = fields.Char() |
||||
|
distributor = fields.Many2one('res.users', 'Distributor') |
||||
|
customer_list = fields.One2many('res.partner', 'customer_route') |
||||
|
|
||||
|
@api.one |
||||
|
def _get_customer_count(self): |
||||
|
self.count_customers = len(self.customer_list) |
||||
|
count_customers = fields.Integer(compute='_get_customer_count') |
||||
|
# location_list = fields.One2many('pharmacy_management.route.location', 'route_id') |
||||
|
location_list1 = fields.Many2many('pharmacy_management.route.location', 'route_id', string='Locations') |
||||
|
|
||||
|
def locations_btn(self, cr, uid, ids, context=None): |
||||
|
return { |
||||
|
'view_type': 'form', |
||||
|
'view_mode': 'tree,form', |
||||
|
'res_model': 'pharmacy_management.route.location', |
||||
|
'view_id': False, |
||||
|
'type': 'ir.actions.act_window', |
||||
|
'name' : _('All Route Locations'), |
||||
|
} |
||||
|
|
||||
|
|
||||
|
# RETAILERS |
||||
|
class RouteInCustomer(models.Model): |
||||
|
_inherit = 'res.partner' |
||||
|
|
||||
|
@api.onchange('customer_route') |
||||
|
def set_id_of_route_distributor(self): |
||||
|
print self.customer_route.distributor.id |
||||
|
self.id_of_route_distributor = self.customer_route.distributor.id |
||||
|
|
||||
|
customer_route = fields.Many2one('pharmacy_management.route', 'Route') |
||||
|
id_of_route_distributor = fields.Integer() |
||||
|
|
||||
|
|
||||
|
# SALE ORDER |
||||
|
class RouteInSaleOrder(models.Model): |
||||
|
_inherit = 'sale.order' |
||||
|
|
||||
|
route_of_customer = fields.Many2one('pharmacy_management.route', 'Route of Customer') |
||||
|
|
||||
|
def onchange_partner_id(self, cr, uid, ids, part, context=None): |
||||
|
if not part: |
||||
|
return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'payment_term': False, 'fiscal_position': False}} |
||||
|
|
||||
|
part = self.pool.get('res.partner').browse(cr, uid, part, context=context) |
||||
|
addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact']) |
||||
|
pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False |
||||
|
invoice_part = self.pool.get('res.partner').browse(cr, uid, addr['invoice'], context=context) |
||||
|
payment_term = invoice_part.property_payment_term and invoice_part.property_payment_term.id or False |
||||
|
dedicated_salesman = part.user_id and part.user_id.id or uid |
||||
|
val = { |
||||
|
'partner_invoice_id': addr['invoice'], |
||||
|
'partner_shipping_id': addr['delivery'], |
||||
|
'payment_term': payment_term, |
||||
|
'user_id': dedicated_salesman, |
||||
|
} |
||||
|
delivery_onchange = self.onchange_delivery_id(cr, uid, ids, False, part.id, addr['delivery'], False, context=context) |
||||
|
val.update(delivery_onchange['value']) |
||||
|
if pricelist: |
||||
|
val['pricelist_id'] = pricelist |
||||
|
if not self._get_default_section_id(cr, uid, context=context) and part.section_id: |
||||
|
val['section_id'] = part.section_id.id |
||||
|
sale_note = self.get_salenote(cr, uid, ids, part.id, context=context) |
||||
|
if sale_note: val.update({'note': sale_note}) |
||||
|
# ================================================= |
||||
|
val['route_of_customer'] = part.customer_route.id |
||||
|
# val['user_id'] = part.customer_route.distributor.id |
||||
|
return {'value': val} |
||||
|
|
||||
|
def _get_route_of_customer_to_show(self): |
||||
|
self.route_of_customer_to_show = self.partner_id.customer_route.id |
||||
|
route_of_customer_to_show = fields.Many2one('pharmacy_management.route', 'Route of Customer' , compute='_get_route_of_customer_to_show') |
||||
|
|
||||
|
|
||||
|
class Locations(models.Model): |
||||
|
_name = 'pharmacy_management.route.location' |
||||
|
|
||||
|
name = fields.Char('Location Name') |
||||
|
route_id = fields.Many2one('pharmacy_management.route') |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 78 KiB |
@ -0,0 +1,28 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--====================================================--> |
||||
|
<!-- ACTION [MEDICINES]--> |
||||
|
<record id="action_medicines" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">product.template</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="product.product_template_kanban_view"/> |
||||
|
<field name="context">{"search_default_filter_to_sell":1, "search_default_medicine_type":1,}</field> |
||||
|
</record> |
||||
|
<!--====================================================--> |
||||
|
<!--MENU [MEDICINES]--> |
||||
|
<menuitem id="menu_med" |
||||
|
name="Medicines" |
||||
|
sequence="30" |
||||
|
parent="medical_feature.menu_med_features"/> |
||||
|
|
||||
|
<menuitem id="menu_med_sub" |
||||
|
action="action_medicines" |
||||
|
sequence="30" |
||||
|
parent="medical_feature.menu_med"/> |
||||
|
<!--=====================================================--> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,174 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<!--GROUP [MEDICAL MANAGER]--> |
||||
|
<record model="res.groups" id="medical_feature.group_medical_user"> |
||||
|
<field name="name">Medical Features Manager</field> |
||||
|
<field name="users" eval="[(4, ref('base.user_root'))]"/> |
||||
|
</record> |
||||
|
|
||||
|
<!--MAIN MENU [MEDICAL FEATURES]--> |
||||
|
<menuitem id="menu_med_features" |
||||
|
name="Medical Features" |
||||
|
sequence="11"/> |
||||
|
<!--MENU [SALES]--> |
||||
|
<menuitem id="menu_med_sale" |
||||
|
name="Sales" |
||||
|
sequence="20" |
||||
|
parent="medical_feature.menu_med_features"/> |
||||
|
<!--MENU [CONFIGURATION]--> |
||||
|
<menuitem id="menu_med_conf" |
||||
|
name="Configuration" |
||||
|
sequence="100" |
||||
|
parent="medical_feature.menu_med_features" |
||||
|
groups="medical_feature.group_medical_user" /> |
||||
|
<!--FORM VIEW MEDICINE TYPES--> |
||||
|
<record model="ir.ui.view" id="form_medicine_types_view"> |
||||
|
<field name="name">product.medicine.types.form</field> |
||||
|
<field name="model">product.medicine.types</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="medicine_type" required="1"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--TREE VIEW MEDICINE TYPES--> |
||||
|
<record model="ir.ui.view" id="tree_medicine_types_view"> |
||||
|
<field name="name">product.medicine.types.tree</field> |
||||
|
<field name="model">product.medicine.types</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="medicine_type"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION MEDICINE TYPES--> |
||||
|
<record id="action_medicine_types" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicine Categories</field> |
||||
|
<field name="res_model">product.medicine.types</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
<!--MENU MEDICINE TYPE--> |
||||
|
<menuitem action="action_medicine_types" |
||||
|
id="menu_med_types" |
||||
|
sequence="2" |
||||
|
parent="medical_feature.menu_med_conf"/> |
||||
|
|
||||
|
<!--ADD MEDICINE CATEGORY AND RES IN FORM VIEW--> |
||||
|
<record id="product_template_form_view_inherited" model="ir.ui.view"> |
||||
|
<field name="name">product.template.form.inherited</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_form_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='type']" position="after"> |
||||
|
<field name="medicine_category"/> |
||||
|
<field name="medicine_type"/> |
||||
|
</xpath> |
||||
|
<xpath expr="//field[@name='sale_ok']" position="before"> |
||||
|
<label for="product_of" string="Product Of"/> |
||||
|
<field name="product_of"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--CUSTOMIZE KANBAN VIEW OF PRODUCTS--> |
||||
|
<record id="product_template_kanban_view_inherited" model="ir.ui.view"> |
||||
|
<field name="name">product.template.kanban.inherited</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_kanban_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//div[@class='oe_kanban_details']" position="inside"> |
||||
|
|
||||
|
<font face = 'Tahoma' size = '3' color = 'ff6666'> <field name="product_of"/> </font> |
||||
|
</xpath> |
||||
|
|
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--ADD FILTER MEDICINE TYPES--> |
||||
|
<record id="product_template_search_view_inherited" model="ir.ui.view"> |
||||
|
<field name="name">product.template.form.inherited.new</field> |
||||
|
<field name="model">product.template</field> |
||||
|
<field name="inherit_id" ref="product.product_template_search_view" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//filter[@string='Type']" position="replace"> |
||||
|
<filter string='Product Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/> |
||||
|
<filter string='Medicine Category' name="medicine_type" domain="[]" context="{'group_by' : 'medicine_type'}"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--OVERRIDING ACTION --> |
||||
|
<record id="product.product_template_action" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicines</field> |
||||
|
<field name="type">ir.actions.act_window</field> |
||||
|
<field name="res_model">product.template</field> |
||||
|
<field name="view_mode">kanban,tree,form</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_id" ref="product.product_template_kanban_view"/> |
||||
|
<field name="context">{"search_default_filter_to_sell":1, "search_default_medicine_type":1,}</field> |
||||
|
</record> |
||||
|
|
||||
|
<!--FOR PRODUCT OF --> |
||||
|
|
||||
|
<!--FORM VIEW PRODUCT OF--> |
||||
|
<record model="ir.ui.view" id="form_medicine_res_view"> |
||||
|
<field name="name">product.medicine.responsible.form</field> |
||||
|
<field name="model">product.medicine.responsible</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<sheet> |
||||
|
<group> |
||||
|
<field name="name_responsible" required="1"/> |
||||
|
<field name="related_vendor"/> |
||||
|
<field name="place"/> |
||||
|
</group> |
||||
|
</sheet> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--TREE VIEW PRODUCT OF--> |
||||
|
<record model="ir.ui.view" id="tree_medicine_res_view"> |
||||
|
<field name="name">product.medicine.responsible.tree</field> |
||||
|
<field name="model">product.medicine.responsible</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree> |
||||
|
<field name="name_responsible"/> |
||||
|
<field name="related_vendor"/> |
||||
|
<field name="place"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</record> |
||||
|
<!--ACTION PRODUCT OF--> |
||||
|
<record id="action_medicine_res" model="ir.actions.act_window"> |
||||
|
<field name="name">Medicine Responsible</field> |
||||
|
<field name="res_model">product.medicine.responsible</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">tree,form</field> |
||||
|
</record> |
||||
|
<!--MENU PRODUCT OF--> |
||||
|
<menuitem action="action_medicine_res" |
||||
|
id="menu_med_res" |
||||
|
sequence="3" |
||||
|
parent="medical_feature.menu_med_conf"/> |
||||
|
<!-- ADD ADMIN TO SERIAL NUMBERS--> |
||||
|
<record id="stock.group_production_lot" model="res.groups"> |
||||
|
<field name="name">Manage Lots / Serial Numbers</field> |
||||
|
<field name="category_id" ref="base.module_category_hidden"/> |
||||
|
<field name="users" eval="[(4, ref('base.user_root'))]"/> |
||||
|
</record> |
||||
|
|
||||
|
<!--MENU RETAILERS--> |
||||
|
<menuitem action="base.action_partner_form" |
||||
|
id="menu_retailers_med" |
||||
|
sequence="1" |
||||
|
parent="medical_feature.menu_med_sale" |
||||
|
name="Retailers"/> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |