@ -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('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'}">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'}">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,65 @@ |
|||
<?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"/> |
|||
<field name="target"/> |
|||
<field name="total_sale"/> |
|||
</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_conf"/> |
|||
|
|||
<!--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="In my area" 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> |
@ -0,0 +1 @@ |
|||
import models |
@ -0,0 +1,27 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
|||
|
|||
|
|||
{ |
|||
'name': 'POS Product Category Filter', |
|||
'version': '1.0', |
|||
'category': 'Point of Sale', |
|||
'sequence': 6, |
|||
'summary': 'Show only specified categories of product in point of sale ', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'description': """ |
|||
|
|||
======================= |
|||
|
|||
|
|||
|
|||
""", |
|||
'depends': ['point_of_sale'], |
|||
'data': ['views/custom_view.xml', |
|||
'views/template.xml'], |
|||
'qweb': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,27 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Part of Odoo. See LICENSE file for full copyright and licensing details. |
|||
|
|||
|
|||
{ |
|||
'name': 'POS Product Category Filter', |
|||
'version': '1.0', |
|||
'category': 'Point of Sale', |
|||
'sequence': 6, |
|||
'summary': 'Show only specified categories of product in point of sale ', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'description': """ |
|||
|
|||
======================= |
|||
|
|||
Customization of produc availablity in PoS. |
|||
|
|||
""", |
|||
'depends': ['point_of_sale'], |
|||
'data': ['views/custom_view.xml', |
|||
'views/template.xml'], |
|||
'qweb': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1 @@ |
|||
import custom |
@ -0,0 +1,16 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from openerp import models, fields, api |
|||
|
|||
class PosProductCateg(models.Model): |
|||
|
|||
_inherit = 'pos.config' |
|||
|
|||
available_categ = fields.Many2many('pos.category', string='Available Product Categories') |
|||
|
|||
|
|||
# |
|||
class PosCateg(models.Model): |
|||
# |
|||
_name = 'pos.custom' |
|||
|
@ -0,0 +1,32 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Point of Sale : Setting Product Categories for POS</h2> |
|||
|
|||
<div> |
|||
<p class='oe_mt32'> |
|||
By installing this module, we can set available product categories for each POS in our system. |
|||
Only those categories set in the POS will be available in that particular POS. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row"> |
|||
<h4 class="oe_slogan">You can set it in POS form as: </h4> |
|||
<div> |
|||
<p class='oe_mt32'> |
|||
Point of sale > Configuration > Point of Sale > Available Product Categories. |
|||
</p> |
|||
</div> |
|||
<div> |
|||
<div class="oe_bg_img"> |
|||
<img class="oe_picture oe_screenshot" src="pos.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
<section class="oe_container oe_separator"> |
|||
</section> |
@ -0,0 +1,48 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Point of Sale : Setting Product Categories for POS</h2> |
|||
|
|||
<div> |
|||
<p class='oe_mt32'> |
|||
By installing this module, we can set available product categories for each POS in our system. |
|||
Only those categories set in the POS will be available in that particular POS. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row"> |
|||
<h4 class="oe_slogan">You can set it in POS form as: </h4> |
|||
<div> |
|||
<p class='oe_mt32'> |
|||
Point of sale > Configuration > Point of Sale > Available Product Categories. |
|||
</p> |
|||
</div> |
|||
<div> |
|||
<div class="oe_bg_img"> |
|||
<img class="oe_picture oe_screenshot" src="pos.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row"> |
|||
<h4 class="oe_slogan">Setting Product category</h4> |
|||
<div> |
|||
<p> |
|||
1) If a root category is given all the subcategories and products under that category will be available. |
|||
</p> |
|||
<p> |
|||
2) If an intermediate category(ie. one with parent and child categories) is given then parent category and all child categories will be available. |
|||
</p> |
|||
<p> |
|||
3) If a child category(ie. one without any child categories), the category can be reached by traversing its ancestor categories. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_separator"> |
|||
</section> |
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,214 @@ |
|||
openerp.pos_product_category_filter = function(instance){ |
|||
var module = instance.point_of_sale; |
|||
var models = module.PosModel.prototype; |
|||
var round_pr = instance.web.round_precision |
|||
|
|||
var model1 = { |
|||
model: 'pos.category', |
|||
fields: ['id','name','parent_id','child_id','image'], |
|||
domain: null, |
|||
loaded: function(self, categories){ |
|||
for(var i = 0, len = categories.length; i < len; i++){ |
|||
categories[i].available = false; |
|||
for(var j = 0, jlen = self.config.available_categ.length; j < jlen; j++){ |
|||
if(categories[i].id == self.config.available_categ[j]){ |
|||
categories[i].available = true; |
|||
} |
|||
} |
|||
} |
|||
self.db.add_categories(categories); |
|||
}, |
|||
} |
|||
|
|||
for(var i=0; i< models.models.length; i++){ |
|||
var model=models.models[i]; |
|||
if(model.model === 'pos.category'){ |
|||
models.models[i] = model1; |
|||
} |
|||
} |
|||
|
|||
|
|||
module.PosDB.include({ |
|||
add_categories: function(categories){ |
|||
|
|||
var self = this; |
|||
|
|||
if(!this.category_by_id[this.root_category_id]){ |
|||
this.category_by_id[this.root_category_id] = { |
|||
id : this.root_category_id, |
|||
name : 'Root', |
|||
}; |
|||
} |
|||
for(var i=0, len = categories.length; i < len; i++){ |
|||
if(categories[i].available === true){ |
|||
categories[i].parent_id[0] = 0; |
|||
} |
|||
} |
|||
for(var i=0, len = categories.length; i < len; i++){ |
|||
this.category_by_id[categories[i].id] = categories[i]; |
|||
} |
|||
for(var i=0, len = categories.length; i < len; i++){ |
|||
var cat = categories[i]; |
|||
var parent_id = cat.parent_id[0] || this.root_category_id; |
|||
this.category_parent[cat.id] = cat.parent_id[0]; |
|||
if(!this.category_childs[parent_id]){ |
|||
this.category_childs[parent_id] = []; |
|||
} |
|||
this.category_childs[parent_id].push(cat.id); |
|||
} |
|||
|
|||
function make_ancestors(cat_id, ancestors){ |
|||
self.category_ancestors[cat_id] = ancestors; |
|||
|
|||
ancestors = ancestors.slice(0); |
|||
ancestors.push(cat_id); |
|||
|
|||
var childs = self.category_childs[cat_id] || []; |
|||
for(var i=0, len = childs.length; i < len; i++){ |
|||
make_ancestors(childs[i], ancestors); |
|||
} |
|||
} |
|||
make_ancestors(this.root_category_id, []); |
|||
}, |
|||
add_products: function(products){ |
|||
var stored_categories = this.product_by_category_id; |
|||
for(var i = 0, len = products.length; i < len; i++){ |
|||
var ancestor_ids = this.get_category_ancestors_ids(products[i].pos_categ_id[0]); |
|||
products[i].pos_categ_ancestors = ancestor_ids; |
|||
} |
|||
for(var i = 0, len = products.length; i < len; i++){ |
|||
products[i].available = false; |
|||
var category = this.get_category_by_id(products[i].pos_categ_id[0]); |
|||
if(category && category.available == true){ |
|||
products[i].available = true; |
|||
}else{ |
|||
if(products[i].pos_categ_ancestors){ |
|||
for(var j = 0, jlen = products[i].pos_categ_ancestors.length; j < jlen; j++){ |
|||
var temp_categ = this.get_category_by_id(products[i].pos_categ_ancestors[j]) |
|||
if(temp_categ != 0 && temp_categ.available == true){ |
|||
products[i].available = true; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
if(!products instanceof Array){ |
|||
products = [products]; |
|||
} |
|||
for(var i = 0, len = products.length; i < len; i++){ |
|||
var product = products[i]; |
|||
var search_string = this._product_search_string(product); |
|||
var categ_id = product.pos_categ_id ? product.pos_categ_id[0] : this.root_category_id; |
|||
product.product_tmpl_id = product.product_tmpl_id[0]; |
|||
if(!stored_categories[categ_id]){ |
|||
stored_categories[categ_id] = []; |
|||
} |
|||
stored_categories[categ_id].push(product.id); |
|||
|
|||
if(this.category_search_string[categ_id] === undefined){ |
|||
this.category_search_string[categ_id] = ''; |
|||
} |
|||
this.category_search_string[categ_id] += search_string; |
|||
|
|||
var ancestors = this.get_category_ancestors_ids(categ_id) || []; |
|||
|
|||
for(var j = 0, jlen = ancestors.length; j < jlen; j++){ |
|||
var ancestor = ancestors[j]; |
|||
if(! stored_categories[ancestor]){ |
|||
stored_categories[ancestor] = []; |
|||
} |
|||
stored_categories[ancestor].push(product.id); |
|||
|
|||
if( this.category_search_string[ancestor] === undefined){ |
|||
this.category_search_string[ancestor] = ''; |
|||
} |
|||
this.category_search_string[ancestor] += search_string; |
|||
} |
|||
this.product_by_id[product.id] = product; |
|||
if(product.ean13){ |
|||
this.product_by_ean13[product.ean13] = product; |
|||
} |
|||
if(product.default_code){ |
|||
this.product_by_reference[product.default_code] = product; |
|||
} |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
module.ProductCategoriesWidget.include({ |
|||
renderElement: function(){ |
|||
var db = this.pos.db; |
|||
var self = this; |
|||
|
|||
var el_str = openerp.qweb.render(this.template, {widget: this}); |
|||
var el_node = document.createElement('div'); |
|||
el_node.innerHTML = el_str; |
|||
el_node = el_node.childNodes[1]; |
|||
|
|||
if(this.el && this.el.parentNode){ |
|||
this.el.parentNode.replaceChild(el_node,this.el); |
|||
} |
|||
|
|||
this.el = el_node; |
|||
|
|||
var hasimages = false; //if none of the subcategories have images, we don't display buttons with icons
|
|||
for(var i = 0; i < this.subcategories.length; i++){ |
|||
if(this.subcategories[i].image){ |
|||
hasimages = true; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
var list_container = el_node.querySelector('.category-list'); |
|||
if (list_container) { |
|||
if (!hasimages) { |
|||
list_container.classList.add('simple'); |
|||
} else { |
|||
list_container.classList.remove('simple'); |
|||
} |
|||
for(var i = 0, len = this.subcategories.length; i < len; i++){ |
|||
if(this.subcategories[i].available == true){ |
|||
list_container.appendChild(this.render_category(this.subcategories[i],hasimages)); |
|||
}else{ |
|||
var ancestor_ids = db.get_category_ancestors_ids(this.subcategories[i].id) |
|||
for(var j = 0, jlen = ancestor_ids.length; j < jlen; j++){ |
|||
if(ancestor_ids[j] != 0){ |
|||
var ancestor = db.get_category_by_id(ancestor_ids[j]) |
|||
if(ancestor.available == true){ |
|||
list_container.appendChild(this.render_category(this.subcategories[i],hasimages)); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
}; |
|||
} |
|||
|
|||
var buttons = el_node.querySelectorAll('.js-category-switch'); |
|||
for(var i = 0; i < buttons.length; i++){ |
|||
buttons[i].addEventListener('click',this.switch_category_handler); |
|||
} |
|||
|
|||
var products = this.pos.db.get_product_by_category(this.category.id); |
|||
var available_products = []; |
|||
for(var i = 0, len = products.length; i < len; i++){ |
|||
if(products[i].available == true){ |
|||
available_products.push(products[i]); |
|||
} |
|||
} |
|||
this.product_list_widget.set_product_list(available_products); |
|||
|
|||
this.el.querySelector('.searchbox input').addEventListener('keyup',this.search_handler); |
|||
$('.searchbox input', this.el).keypress(function(e){ |
|||
e.stopPropagation(); |
|||
}); |
|||
|
|||
this.el.querySelector('.search-clear').addEventListener('click',this.clear_search_handler); |
|||
|
|||
if(this.pos.config.iface_vkeyboard && this.pos_widget.onscreen_keyboard){ |
|||
this.pos_widget.onscreen_keyboard.connect($(this.el.querySelector('.searchbox input'))); |
|||
} |
|||
}, |
|||
}); |
|||
}; |
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
<record id="pos_config_main_form_view2" model="ir.ui.view"> |
|||
<field name="name">pos.config.form.view.inherit</field> |
|||
<field name="model">pos.config</field> |
|||
<field name="inherit_id" ref="point_of_sale.view_pos_config_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//form[@string='Point of Sale Configuration']/sheet/group[@string='Features']/group/field[@name='iface_big_scrollbars']" position="after"> |
|||
<field name="available_categ" widget="many2many_tags"></field> |
|||
</xpath> |
|||
|
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
<template id="assets_frontend" inherit_id="web.assets_common"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/pos_product_category_filter/static/src/js/category.js"></script> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</data> |
|||
</openerp> |
@ -1 +1,2 @@ |
|||
import models |
|||
import models |
|||
import report |
|||
|
@ -1,2 +1,3 @@ |
|||
import account_invoice |
|||
import sale |
|||
import sale_discount_approval |
|||
|
@ -0,0 +1,2 @@ |
|||
import account_invoice |
|||
import sale |
@ -0,0 +1,102 @@ |
|||
from openerp import api, models, fields |
|||
from openerp.osv import fields, osv |
|||
from openerp import SUPERUSER_ID |
|||
|
|||
##############################################################sale settings############################################################## |
|||
|
|||
class Sale_config_settings(osv.TransientModel): |
|||
_inherit = 'sale.config.settings' |
|||
_columns = { |
|||
'limit_discount': fields.integer('Discount limit requires approval %', required=True, |
|||
help="Discount after which approval of sale is required."), |
|||
'module_sale_discount_approval': fields.boolean("Force two levels of approvals", |
|||
help='Provide a double validation mechanism for sale exceeding minimum discount.\n' |
|||
), |
|||
} |
|||
|
|||
_defaults = { |
|||
'limit_discount': 40, |
|||
} |
|||
|
|||
def get_default_limit_discount(self, cr, uid, ids, context=None): |
|||
ir_values = self.pool.get('ir.values') |
|||
limit_discount = ir_values.get_default(cr, uid, 'sale.config.settings', 'limit_discount') |
|||
return { |
|||
'limit_discount': limit_discount, |
|||
} |
|||
|
|||
def set_limit_discount(self, cr, uid, ids, context=None): |
|||
ir_values = self.pool.get('ir.values') |
|||
wizard = self.browse(cr, uid, ids)[0] |
|||
if wizard.limit_discount: |
|||
limit_discount = wizard.limit_discount |
|||
ir_values.set_default(cr, SUPERUSER_ID, 'sale.config.settings', 'limit_discount', limit_discount) |
|||
|
|||
def get_default_module_sale_discount_approval(self, cr, uid, ids, context=None): |
|||
ir_values = self.pool.get('ir.values') |
|||
module_sale_discount_approval = ir_values.get_default(cr, uid, 'sale.config.settings', |
|||
'module_sale_discount_approval') |
|||
return { |
|||
'module_sale_discount_approval': module_sale_discount_approval == 'True', |
|||
} |
|||
|
|||
def set_module_sale_discount_approval(self, cr, uid, ids, context=None): |
|||
ir_values = self.pool.get('ir.values') |
|||
wizard = self.browse(cr, uid, ids)[0] |
|||
if wizard.module_sale_discount_approval: |
|||
module_sale_discount_approval = 'True' |
|||
else: |
|||
module_sale_discount_approval = 'False' |
|||
|
|||
ir_values.set_default(cr, SUPERUSER_ID, 'sale.config.settings', 'module_sale_discount_approval', |
|||
module_sale_discount_approval) |
|||
|
|||
|
|||
#######################################################sale order workflow############################################################## |
|||
|
|||
class SaleInherit(osv.Model): |
|||
_inherit = 'sale.order' |
|||
|
|||
_columns = { |
|||
'state': fields.selection([('draft', 'Draft Quotation'), |
|||
('sent', 'Quotation Sent'), |
|||
('cancel', 'Cancelled'), |
|||
('waiting_date', 'Waiting Schedule'), |
|||
('waitingapproval', 'Waiting Approval'), |
|||
('progress', 'Sales Order'), |
|||
('manual', 'Sale to Invoice'), |
|||
('shipping_except', 'Shipping Exception'), |
|||
('invoice_except', 'Invoice Exception'), |
|||
('done', 'Done')], required=True, track_visibility='onchange'), |
|||
} |
|||
|
|||
def action_button_confirm(self, cr, uid, ids, context=None): |
|||
discnt = 0.0 |
|||
no_line = 0.0 |
|||
line_dicnt = 0.0 |
|||
prod_price = 0.0 |
|||
conf = self.pool.get('ir.values') |
|||
sale_obj = self.browse(cr, uid, ids, context) |
|||
double_valid = conf.get_default(cr, uid, 'sale.config.settings', 'module_sale_discount_approval') |
|||
if double_valid == 'True': |
|||
min_disct = conf.get_default(cr, uid, 'sale.config.settings', 'limit_discount') |
|||
for line in sale_obj.order_line: |
|||
no_line += 1 |
|||
discnt += line.discount |
|||
discnt = (discnt / no_line) |
|||
if discnt >= min_disct: |
|||
assert len(ids) == 1, 'This option should only be used for a single id at a time.' |
|||
self.signal_workflow(cr, uid, ids, 'order_toapprov') |
|||
return True |
|||
else: |
|||
return super(SaleInherit, self).action_button_confirm(cr, uid, ids, context) |
|||
else: |
|||
return super(SaleInherit, self).action_button_confirm(cr, uid, ids, context) |
|||
|
|||
####################################### workflow functions############################################################################# |
|||
|
|||
@api.one |
|||
def wait_approval(self): |
|||
|
|||
self.state = 'waitingapproval' |
|||
return True |
@ -0,0 +1,2 @@ |
|||
import sale_report |
|||
import invoice_report |
@ -0,0 +1,22 @@ |
|||
from openerp.osv import fields, osv |
|||
|
|||
|
|||
class DiscountInvoiceReport(osv.osv): |
|||
_inherit = 'account.invoice.report' |
|||
|
|||
_columns = { |
|||
'discount': fields.float('Discount', readonly=True), |
|||
} |
|||
|
|||
def _select(self): |
|||
res = super(DiscountInvoiceReport,self)._select() |
|||
select_str = res + """, sub.discount / cr.rate as discount """ |
|||
return select_str |
|||
|
|||
def _sub_select(self): |
|||
res = super(DiscountInvoiceReport,self)._sub_select() |
|||
select_str = res + """,SUM(CASE |
|||
WHEN ai.type::text = ANY (ARRAY['out_refund'::character varying::text, 'in_invoice'::character varying::text]) |
|||
THEN - ((ail.quantity / u.factor * u2.factor) * ail.price_unit * (ail.discount) / 100.0) |
|||
ELSE ((ail.quantity / u.factor * u2.factor) * ail.price_unit * (ail.discount) / 100.0) END) as discount""" |
|||
return select_str |
@ -0,0 +1,14 @@ |
|||
from openerp.osv import fields, osv |
|||
|
|||
|
|||
class DiscountSaleReport(osv.osv): |
|||
_inherit = 'sale.report' |
|||
|
|||
_columns = { |
|||
'discount': fields.float('Discount', readonly=True), |
|||
} |
|||
|
|||
def _select(self): |
|||
res = super(DiscountSaleReport,self)._select() |
|||
select_str = res+""",sum(l.product_uom_qty * cr.rate * l.price_unit * (l.discount) / 100.0) as discount""" |
|||
return select_str |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 42 KiB |
@ -0,0 +1,39 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row"> |
|||
<h2 class="oe_slogan">Discount On Sale</h2> |
|||
<!--<h3 class="oe_slogan">It Fits Your Sales Approach</h3>--> |
|||
<div> |
|||
<p> |
|||
This module allows you to mention discount on Total of sale order and Total of Customer Invoice in two ways |
|||
</p> |
|||
<hr> |
|||
<p> |
|||
1. As percentage<br> |
|||
Select 'Percentage' from Discount type and give discount percentage as Discount rate. |
|||
System will update the value of Discount and Total |
|||
</p> |
|||
<div class="oe_row_img oe_centered oe_mt32"> |
|||
<img class="oe_picture oe_screenshot" src="Discount_so_perc.png"> |
|||
</div> |
|||
<hr> |
|||
<p> |
|||
2. As amount<br> |
|||
Select 'Amount' from Discount type and give discount amount as Discount rate. |
|||
System will update the value of Discount and Total |
|||
</p> |
|||
<div class="oe_row_img oe_centered oe_mt32"> |
|||
<img class="oe_picture oe_screenshot" src="Discount_inv_amnt.png"> |
|||
</div> |
|||
<hr> |
|||
<p> |
|||
And the module also allows you to set a limit for total discount in percentage. Exceeding this limit |
|||
will require approval. |
|||
</p> |
|||
<div class="oe_row_img oe_centered oe_mt32"> |
|||
<img class="oe_picture oe_screenshot" src="Disc_appr_conf.png"><hr> |
|||
<img class="oe_picture oe_screenshot" src="Disc_appr_wrkfl.png"> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</section> |
@ -0,0 +1,87 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="report_invoice_document" inherit_id="account.report_invoice_document"> |
|||
<xpath expr="//table" position="replace"> |
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Description</th> |
|||
<th>Quantity</th> |
|||
<th class="text-right">Unit Price</th> |
|||
<!--<span t-foreach="o.invoice_line" t-as="l">--> |
|||
<!--<span t-if="l.discount">--> |
|||
<span t-if="o.amount_discount"> |
|||
<th class="text-right" groups="sale.group_discount_per_so_line">Discount (%)</th> |
|||
</span> |
|||
<!--</span>--> |
|||
<th class="text-right">Taxes</th> |
|||
<th class="text-right">Amount</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody class="invoice_tbody"> |
|||
<tr t-foreach="o.invoice_line" t-as="l"> |
|||
<td><span t-field="l.name"/></td> |
|||
<td> |
|||
<span t-field="l.quantity"/> |
|||
<span t-field="l.uos_id" groups="product.group_uom"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="l.price_unit"/> |
|||
</td> |
|||
<span t-if="o.amount_discount"> |
|||
<td class="text-right" groups="sale.group_discount_per_so_line"> |
|||
<span t-field="l.discount"/> |
|||
</td> |
|||
</span> |
|||
<td class="text-right"> |
|||
<span t-esc="', '.join(map(lambda x: x.name, l.invoice_line_tax_id))"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="l.price_subtotal" |
|||
t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</xpath> |
|||
|
|||
<xpath expr="//div[@class='col-xs-4 pull-right']/table/tr[2]" position="after"> |
|||
<!--<t t-if="o.type=='out_invoice' or o.type=='out_refund'">--> |
|||
<t t-if="o.discount_rate"> |
|||
<tr> |
|||
<td>Discount</td> |
|||
<td class="text-right"> |
|||
<span t-field="o.amount_discount" t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
|
|||
<!--</t>--> |
|||
</xpath> |
|||
<!--<xpath expr="//div[@class='col-xs-4 pull-right']" position="before">--> |
|||
<!--<t t-if="o.type=='out_invoice' or o.type=='out_refund'">--> |
|||
<!--<div class="col-xs-4">--> |
|||
<!--<t t-if="o.discount_rate">--> |
|||
<!--<table class="table table-condensed">--> |
|||
<!--<tr class="border-black">--> |
|||
<!--<td>Discount Type</td>--> |
|||
<!--<td class="text-right">--> |
|||
<!--<span t-field="o.discount_type"/>--> |
|||
<!--</td>--> |
|||
<!--</tr>--> |
|||
<!--<tr>--> |
|||
<!--<td>Discount rate</td>--> |
|||
<!--<td class="text-right">--> |
|||
<!--<span t-field="o.discount_rate"/>--> |
|||
<!--</td>--> |
|||
<!--</tr>--> |
|||
<!--<tr class="border-black"></tr>--> |
|||
<!--</table>--> |
|||
<!--</t>--> |
|||
<!--</div>--> |
|||
<!--</t>--> |
|||
<!--</xpath>--> |
|||
</template> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,28 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
<record id="view_double_sale_configuration" model="ir.ui.view"> |
|||
<field name="name">Sale Application</field> |
|||
<field name="model">sale.config.settings</field> |
|||
<field name="inherit_id" ref="sale.view_sales_config"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@name='Sale Features']" position="inside"> |
|||
|
|||
<div> |
|||
<div name="module_sale_discount_approval"> |
|||
<field name="module_sale_discount_approval" class="oe_inline"/> |
|||
<label for="module_sale_discount_approval"/> |
|||
<span class="oe_separate-from-text"> |
|||
<label for="limit_discount"/> |
|||
<field name="limit_discount" attrs="{'required': [('module_sale_discount_approval','=',True)]}" class="oe_inline"/> |
|||
</span> |
|||
</div> |
|||
|
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1,133 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
|
|||
<record id="sale_inherit_wkfform_view" model="ir.ui.view"> |
|||
<field name="name">sale.order.workflow.inherit</field> |
|||
<field name="model">sale.order</field> |
|||
<field name="inherit_id" ref="sale.view_order_form"/> |
|||
<field name="arch" type="xml"> |
|||
<!-- Statusbar widget should also contain the new status --> |
|||
<field name="state" position="replace"> |
|||
<field name="state" widget="statusbar" statusbar_visible="draft,sent,progress,done" statusbar_colors='{"invoice_except":"red","waiting_date":"blue"}'/> |
|||
</field> |
|||
<field name="state" position="before"> |
|||
<!-- buttonz --> |
|||
<button string="Approve Order" type="workflow" name="order_confirm" states="waitingapproval" class="oe_highlight" groups="base.group_sale_manager"/> |
|||
</field> |
|||
<xpath expr="//button[@name='action_cancel']" position="attributes"> |
|||
<attribute name ="states">waitingapproval,manual,progress</attribute> |
|||
</xpath> |
|||
<xpath expr="//button[@name='action_cancel']" position="attributes"> |
|||
<attribute name ="states">waitingapproval,manual,progress</attribute> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<!--activity--> |
|||
<record id="act_approve" model="workflow.activity"> |
|||
<field name="wkf_id" ref="sale.wkf_sale"/> |
|||
<field name="name">Waiting Approval</field> |
|||
<field name="kind">function</field> |
|||
<field name="action">wait_approval()</field> |
|||
</record> |
|||
|
|||
<!--end of activity--> |
|||
<!--transitions--> |
|||
|
|||
<record model="workflow.transition" id="sale.trans_draft_router"> |
|||
<field name="act_from" ref="sale.act_draft"/> |
|||
<field name="act_to" ref="act_approve"/> |
|||
<field name="signal">order_toapprov</field> |
|||
</record> |
|||
|
|||
<record id="sale_trans_draft_router" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_draft"/> |
|||
<field name="act_to" ref="sale.act_router"/> |
|||
<field name="signal">order_confirm</field> |
|||
</record> |
|||
|
|||
<record id="sale_trans_approvd" model="workflow.transition"> |
|||
<field name="act_from" ref="act_approve"/> |
|||
<field name="act_to" ref="sale.act_router"/> |
|||
<field name="signal">order_confirm</field> |
|||
</record> |
|||
|
|||
<!--end of transition--> |
|||
|
|||
<!--sale transition inherit--> |
|||
<record id="sale.trans_draft_sent" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_draft"/> |
|||
<field name="act_to" ref="sale.act_sent"/> |
|||
<field name="signal">quotation_sent</field> |
|||
</record> |
|||
|
|||
<record id="sale.trans_draft_cancel" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_draft"/> |
|||
<field name="act_to" ref="sale.act_cancel"/> |
|||
<field name="signal">cancel</field> |
|||
</record> |
|||
|
|||
<record id="sale.trans_sent_router" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_sent"/> |
|||
<field name="act_to" ref="sale.act_router"/> |
|||
<field name="signal">order_confirm</field> |
|||
</record> |
|||
<record id="sale.trans_sent_cancel" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_sent"/> |
|||
<field name="act_to" ref="sale.act_cancel"/> |
|||
<field name="signal">cancel</field> |
|||
</record> |
|||
<record id="sale.trans_router_wait_invoice" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_router"/> |
|||
<field name="act_to" ref="sale.act_wait_invoice"/> |
|||
</record> |
|||
<record id="sale.trans_wait_invoice_all_lines_invoiced" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_wait_invoice"/> |
|||
<field name="act_to" ref="sale.act_invoice_end"/> |
|||
<field name="signal">all_lines</field> |
|||
</record> |
|||
<record id="sale.trans_wait_invoice_cancel2" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_wait_invoice"/> |
|||
<field name="act_to" ref="sale.act_cancel2"/> |
|||
<field name="signal">cancel</field> |
|||
</record> |
|||
<record id="sale.trans_wait_invoice_invoice_manual" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_wait_invoice"/> |
|||
<field name="act_to" ref="sale.act_invoice"/> |
|||
<field name="signal">manual_invoice</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_invoice_end" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice"/> |
|||
<field name="act_to" ref="sale.act_invoice_end"/> |
|||
<field name="signal">subflow.paid</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_invoice_except" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice"/> |
|||
<field name="act_to" ref="sale.act_invoice_except"/> |
|||
<field name="signal">subflow.cancel</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_except_invoice" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice_except"/> |
|||
<field name="act_to" ref="sale.act_invoice"/> |
|||
<field name="signal">invoice_recreate</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_except_invoice_end" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice_except"/> |
|||
<field name="act_to" ref="sale.act_invoice_end"/> |
|||
<field name="signal">invoice_corrected</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_except_invoice_cancel" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice_except"/> |
|||
<field name="act_to" ref="sale.act_invoice_cancel"/> |
|||
<field name="signal">invoice_cancel</field> |
|||
</record> |
|||
<record id="sale.trans_invoice_end_done" model="workflow.transition"> |
|||
<field name="act_from" ref="sale.act_invoice_end"/> |
|||
<field name="act_to" ref="sale.act_done"/> |
|||
</record> |
|||
|
|||
<!--end of sale transitions--> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,40 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="report_sale_order_document" inherit_id="sale.report_saleorder_document"> |
|||
|
|||
<xpath expr="//div[@class='col-xs-4 pull-right']/table/tr[2]" position="after"> |
|||
<t t-if="o.discount_rate"> |
|||
<tr> |
|||
<td>Discount</td> |
|||
<td class="text-right"> |
|||
<span t-field="o.amount_discount" t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</xpath> |
|||
|
|||
<!--<xpath expr="//div[@class='col-xs-4 pull-right']" position="before">--> |
|||
<!--<div class="col-xs-4">--> |
|||
<!--<t t-if="o.discount_rate">--> |
|||
<!--<table class="table table-condensed">--> |
|||
<!--<tr class="border-black">--> |
|||
<!--<td>Discount Type</td>--> |
|||
<!--<td class="text-right">--> |
|||
<!--<span t-field="o.discount_type"/>--> |
|||
<!--</td>--> |
|||
<!--</tr>--> |
|||
<!--<tr>--> |
|||
<!--<td>Discount Rate</td>--> |
|||
<!--<td class="text-right">--> |
|||
<!--<span t-field="o.discount_rate"/>--> |
|||
<!--</td>--> |
|||
<!--</tr>--> |
|||
<!--<tr class="border-black"></tr>--> |
|||
<!--</table>--> |
|||
<!--</t>--> |
|||
<!--</div>--> |
|||
<!--</xpath>--> |
|||
</template> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1 @@ |
|||
import models,sweep |
@ -0,0 +1,41 @@ |
|||
{ |
|||
'name': 'Salon Booking', |
|||
'summary': """ """, |
|||
'description': """ """, |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'category': 'Test', |
|||
'version': '0.1', |
|||
|
|||
'depends': ['base', |
|||
'sale', |
|||
'hr', |
|||
], |
|||
|
|||
'data': [ |
|||
'templates/template.xml', |
|||
'security/ir.model.access.csv', |
|||
'views/chair_view.xml', |
|||
'views/period_view.xml', |
|||
'views/day_view.xml', |
|||
'views/month_view.xml', |
|||
'views/autofill_month.xml', |
|||
'views/salon_book_view.xml', |
|||
'sweep/sweep_sale_order.xml', |
|||
'sweep/sweep_menu_act.xml', |
|||
'sweep/sweep_product.xml', |
|||
'sweep/sweep_invoice.xml', |
|||
], |
|||
|
|||
'demo': ['demo/demo_chair.xml', |
|||
'demo/demo_time.xml', |
|||
'demo/demo_day.xml', |
|||
'demo/demo_month.xml', |
|||
|
|||
], |
|||
|
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': True, |
|||
} |
|||
|
@ -0,0 +1,28 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<record id="chair_0001" model="salon.chair"> |
|||
<field name="name">CH0001</field> |
|||
<field name="related_employee" ref="hr.employee_fp"/> |
|||
</record> |
|||
|
|||
<record id="chair_0002" model="salon.chair"> |
|||
<field name="name">CH0002</field> |
|||
<field name="related_employee" ref="hr.employee_al"/> |
|||
</record> |
|||
|
|||
<record id="chair_0003" model="salon.chair"> |
|||
<field name="name">CH0003</field> |
|||
<field name="related_employee" ref="hr.employee_mit"/> |
|||
</record> |
|||
|
|||
<record id="chair_0004" model="salon.chair"> |
|||
<field name="name">CH0004</field> |
|||
<field name="related_employee" ref="hr.employee_niv"/> |
|||
</record> |
|||
|
|||
|
|||
|
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1,911 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<!-- 1 --> |
|||
<!--<record id="day_0001" model="salon.day">--> |
|||
<!--<field name="name">01</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_0001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_0002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_0003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_0004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_0005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 2 –>--> |
|||
<!--<record id="day_0002" model="salon.day">--> |
|||
<!--<field name="name">02</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e10001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e10002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_e10003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e10004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e10005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 3 –>--> |
|||
<!--<record id="day_0003" model="salon.day">--> |
|||
<!--<field name="name">03</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_n110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
<!--<!– 4 –>--> |
|||
<!--<record id="day_0004" model="salon.day">--> |
|||
<!--<field name="name">04</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_ks1110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_ks1110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_ks1110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_ks1110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_ks1110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 5 –>--> |
|||
<!--<record id="day_0005" model="salon.day">--> |
|||
<!--<field name="name">05</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x111110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x111110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_x111110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x111110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x111110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 6 –>--> |
|||
<!--<record id="day_0006" model="salon.day">--> |
|||
<!--<field name="name">06</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_211110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_211110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_211110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_211110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_211110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 7 –>--> |
|||
<!--<record id="day_0007" model="salon.day">--> |
|||
<!--<field name="name">07</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_40001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_40002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_40003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_40005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 8 –>--> |
|||
|
|||
<!--<record id="day_0008" model="salon.day">--> |
|||
<!--<field name="name">08</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 9 –>--> |
|||
<!--<record id="day_0009" model="salon.day">--> |
|||
<!--<field name="name">09</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_4440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 10 –>--> |
|||
<!--<record id="day_00010" model="salon.day">--> |
|||
<!--<field name="name">10</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_44440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!–========================================================================================================–>--> |
|||
<!--<!– 1 –>--> |
|||
<!--<record id="day_00011" model="salon.day">--> |
|||
<!--<field name="name">11</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_10001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_10002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_10003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_10004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_10005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 2 –>--> |
|||
<!--<record id="day_00012" model="salon.day">--> |
|||
<!--<field name="name">12</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 3 –>--> |
|||
<!--<record id="day_00013" model="salon.day">--> |
|||
<!--<field name="name">13</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_1110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
<!--<!– 4 –>--> |
|||
<!--<record id="day_00014" model="salon.day">--> |
|||
<!--<field name="name">14</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_11110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_11110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_11110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_11110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_11110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 5 –>--> |
|||
<!--<record id="day_00015" model="salon.day">--> |
|||
<!--<field name="name">15</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_111110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_111110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_111110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_111110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_111110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 6 –>--> |
|||
<!--<record id="day_00016" model="salon.day">--> |
|||
<!--<field name="name">16</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2111110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2111110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_2111110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2111110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2111110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 7 –>--> |
|||
<!--<record id="day_00017" model="salon.day">--> |
|||
<!--<field name="name">17</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_400101" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_401002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_400103" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_401004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_400105" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 8 –>--> |
|||
|
|||
<!--<record id="day_00018" model="salon.day">--> |
|||
<!--<field name="name">18</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_1440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_1440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 9 –>--> |
|||
<!--<record id="day_00019" model="salon.day">--> |
|||
<!--<field name="name">19</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_14440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_14440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_14440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_14440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_14440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 10 –>--> |
|||
<!--<record id="day_00020" model="salon.day">--> |
|||
<!--<field name="name">20</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_144440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_144440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_144440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_144440004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_144440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
<!--<!–===========================================================================–>--> |
|||
<!--<!–=========================================================================–>--> |
|||
<!--<!– 1 –>--> |
|||
<!--<record id="day_00021" model="salon.day">--> |
|||
<!--<field name="name">21</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w0001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w0002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_w0003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w0004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w0005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 2 –>--> |
|||
<!--<record id="day_00022" model="salon.day">--> |
|||
<!--<field name="name">22</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e1w0001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e10w002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_e100w03" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e1w0004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_e1w0005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 3 –>--> |
|||
<!--<record id="day_00023" model="salon.day">--> |
|||
<!--<field name="name">23</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n11w0001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n11w0002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_n11w0003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n11w0004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_n1w10005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
<!--<!– 4 –>--> |
|||
<!--<record id="day_00024" model="salon.day">--> |
|||
<!--<field name="name">24</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_sw1110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_sw1110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_s1110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_s1w110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_sw1110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 5 –>--> |
|||
<!--<record id="day_00025" model="salon.day">--> |
|||
<!--<field name="name">25</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x1w11110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x1w11110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_x11w1110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x1w11110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_x1w11110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 6 –>--> |
|||
<!--<record id="day_00026" model="salon.day">--> |
|||
<!--<field name="name">26</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_21w1110001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2w11110002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_21w1110003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_211w110004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_2w11110005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 7 –>--> |
|||
<!--<record id="day_00027" model="salon.day">--> |
|||
<!--<field name="name">27</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w40001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w40002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_w40003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w40005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 8 –>--> |
|||
|
|||
<!--<record id="day_00028" model="salon.day">--> |
|||
<!--<field name="name">28</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4w40001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4w40002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_4w40003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_4w40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_w440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 9 –>--> |
|||
<!--<record id="day_00029" model="salon.day">--> |
|||
<!--<field name="name">29</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_q44w40001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_q444w0002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_q44w40003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_q44w40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_q4w440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 10 –>--> |
|||
<!--<record id="day_00030" model="salon.day">--> |
|||
<!--<field name="name">30</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44w440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44w440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_44w440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_444w40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_44w440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
<!--<!–==========================================================================–>--> |
|||
|
|||
|
|||
|
|||
<!--<!– 31 –>--> |
|||
<!--<record id="day_00031" model="salon.day">--> |
|||
<!--<field name="name">31</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_p44w440001" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--<field name="day_id" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_p44w440002" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--<field name="day_id" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
<!--<record id="day_line_p44w440003" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--<field name="day_id" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_p444w40004" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--<field name="day_id" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="day_line_p44w440005" model="salon.day.line">--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--<field name="day_id" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,166 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<!--<record id="month_0001" model="salon.month">--> |
|||
<!--<field name="name">Dec 2016</field>--> |
|||
<!--<field name="month">01</field>--> |
|||
<!--<field name="year">2016</field>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0001" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0002" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0003" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0004" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0005" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0006" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0006"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0007" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0007"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0008" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0008"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_0009" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_0009"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00010" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00010"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– =================================================================== –>--> |
|||
<!--<record id="month_line_00011" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00012" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00012"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00013" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00013"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00014" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00014"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00015" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00015"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00016" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00016"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00017" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00017"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00018" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00018"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00019" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00019"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_00020" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00020"/>--> |
|||
<!--</record>--> |
|||
<!--<!– ===========================================================–>--> |
|||
<!--<record id="month_line_000211" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000212" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00022"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000213" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00023"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000214" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00024"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000215" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00025"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000216" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00026"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000217" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00027"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000218" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00028"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000219" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00029"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="month_line_000220" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00030"/>--> |
|||
<!--</record>--> |
|||
<!--<!–===========================================================–>--> |
|||
<!--<record id="month_line_000220_31" model="salon.month.line">--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--<field name="days" ref="day_00031"/>--> |
|||
<!--</record>--> |
|||
</data> |
|||
</openerp> |
@ -0,0 +1,473 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
|
|||
<!--<record id="month_0001" model="salon.month">--> |
|||
<!--<field name="name">Jan 2016</field>--> |
|||
<!--<field name="month">01</field>--> |
|||
<!--<field name="year">2016</field>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
<!--<!–day 01–>--> |
|||
<!--<record id="day_000_cc1" model="salon.day">--> |
|||
<!--<field name="name">01</field>--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 09.30 –>--> |
|||
<!--<record id="time_00001" model="salon.period">--> |
|||
<!--<field name="name">09.30</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc1"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_00001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_00002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_00003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_00004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_00001"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 11:00 –>--> |
|||
|
|||
<!--<record id="time_00002" model="salon.period">--> |
|||
<!--<field name="name">11.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc1"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_100001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_00002"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 13:00 –>--> |
|||
<!--<record id="time_00003" model="salon.period">--> |
|||
<!--<field name="name">13.00</field>--> |
|||
<!--<field name="period_type">off</field>--> |
|||
<!--<field name="off_reason">Lunch Break</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc1"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1100001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_00003"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 15:00 –>--> |
|||
<!--<record id="time_00004" model="salon.period">--> |
|||
<!--<field name="name">15.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc1"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11100x001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11s100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1d1100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_00004"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 19:00–>--> |
|||
|
|||
<!--<record id="time_00005" model="salon.period">--> |
|||
<!--<field name="name">19.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc1"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_00005"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!–===================================================================================–>--> |
|||
<!--<!–day 02–>--> |
|||
<!--<record id="day_000_cc2" model="salon.day">--> |
|||
<!--<field name="name">02</field>--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<record id="time_000011" model="salon.period">--> |
|||
<!--<field name="name">09.30</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc2"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000011" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000021" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000031" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000041" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000011"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 11:00 –>--> |
|||
|
|||
<!--<record id="time_000021" model="salon.period">--> |
|||
<!--<field name="name">11.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc2"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_hf1000011" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1xs000021" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1jh000031" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_liasdne_1000041" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000021"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 13:00 –>--> |
|||
<!--<record id="time_000031" model="salon.period">--> |
|||
<!--<field name="name">13.00</field>--> |
|||
<!--<field name="period_type">off</field>--> |
|||
<!--<field name="off_reason">Lunch Break</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc2"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_x11000011" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1100x0021" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11x000031" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_linex_11000041" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000031"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 15:00 –>--> |
|||
<!--<record id="time_000041" model="salon.period">--> |
|||
<!--<field name="name">15.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc2"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1110x00011" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000041"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111000021" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000041"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111000031" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000041"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111000041" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000041"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 19:00–>--> |
|||
|
|||
<!--<record id="time_000051" model="salon.period">--> |
|||
<!--<field name="name">19.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc2"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1111000011" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000051"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1111000021" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000051"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1111000031" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000051"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1111000041" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000051"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!–=============================================================================================================–>--> |
|||
|
|||
<!--<!–day 03–>--> |
|||
<!--<record id="day_000_cc3" model="salon.day">--> |
|||
<!--<field name="name">03</field>--> |
|||
<!--<field name="month_id" ref="month_0001"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 09.30 –>--> |
|||
<!--<record id="time_000061" model="salon.period">--> |
|||
<!--<field name="name">09.30</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc3"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_200001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000061"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_df100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000061"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_200003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000061"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_200004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000061"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 11:00 –>--> |
|||
|
|||
<!--<record id="time_000062" model="salon.period">--> |
|||
<!--<field name="name">11.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc3"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_10sf0001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000062"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000xc02" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000062"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_10dfas0003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000062"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1000dshy04" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000062"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 13:00 –>--> |
|||
<!--<record id="time_000063" model="salon.period">--> |
|||
<!--<field name="name">13.00</field>--> |
|||
<!--<field name="period_type">off</field>--> |
|||
<!--<field name="off_reason">Lunch Break</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc3"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_110x0001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000063"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_110x0002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000063"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_x1100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000063"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_1x100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000063"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<!– 15:00 –>--> |
|||
<!--<record id="time_000064" model="salon.period">--> |
|||
<!--<field name="name">15.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc3"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11100001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000064"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11100002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000064"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11100003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000064"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="f" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000064"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
<!--<!– 19:00–>--> |
|||
|
|||
<!--<record id="time_000065" model="salon.period">--> |
|||
<!--<field name="name">19.00</field>--> |
|||
<!--<field name="day_id" ref="day_000_cc3"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_11110dsz0001" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0001"/>--> |
|||
<!--<field name="period_id" ref="time_000065"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100k002" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0002"/>--> |
|||
<!--<field name="period_id" ref="time_000065"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111100sq003" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0003"/>--> |
|||
<!--<field name="period_id" ref="time_000065"/>--> |
|||
<!--</record>--> |
|||
|
|||
<!--<record id="time_line_111op100004" model="salon.period.line">--> |
|||
<!--<field name="chair_id" ref="chair_0004"/>--> |
|||
<!--<field name="period_id" ref="time_000065"/>--> |
|||
<!--</record>--> |
|||
|
|||
|
|||
|
|||
|
|||
<!--DEMO GENERAL TIMES --> |
|||
|
|||
<record id="time_gen_0001" model="salon.period"> |
|||
<field name="name">9.30</field> |
|||
</record> |
|||
|
|||
<record id="time_gen_0002" model="salon.period"> |
|||
<field name="name">11.30</field> |
|||
</record> |
|||
|
|||
<record id="time_gen_0003" model="salon.period"> |
|||
<field name="name">13.00</field> |
|||
<field name="period_type">off</field> |
|||
<field name="off_reason">Lunch Break</field> |
|||
</record> |
|||
|
|||
<record id="time_gen_0004" model="salon.period"> |
|||
<field name="name">15.30</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="time_gen_0005" model="salon.period"> |
|||
<field name="name">19.00</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1 @@ |
|||
import chair,period,day,month,autofill_month,salon_book, confirm_booking |
@ -0,0 +1,55 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID,_ |
|||
|
|||
|
|||
class AutoFillWizard(models.TransientModel): |
|||
_name = 'salon.auto_fill.wizard' |
|||
|
|||
name = fields.Char('Name') |
|||
month = fields.Integer('Month') |
|||
year = fields.Integer('Year') |
|||
no_days = fields.Integer('No of Days') |
|||
|
|||
@api.one |
|||
@api.onchange('month') |
|||
def onchange_month(self): |
|||
days = {1: 31, 2: 29, 3: 31, |
|||
4: 30, 5: 31, 6: 30, |
|||
7: 31, 8: 31, 9: 30, |
|||
10: 31, 11: 30, 12: 31, }.get(self.month) |
|||
if days: |
|||
self.no_days = days |
|||
|
|||
@api.one |
|||
def act_auto_fill(self): |
|||
if self.name: |
|||
month_name = self.name |
|||
else: |
|||
month_name = 'Untitled Month'+str(self.id) |
|||
times_list = [] |
|||
for Each_Time in self.env['salon.period'].search([('day_id', '=', None)]): |
|||
time_line_list = [] |
|||
for Each_Chair in self.env['salon.chair'].search([]): |
|||
time_line_list.append((0, 0, {'chair_id': Each_Chair.id})) |
|||
times_list.append((0, 0, {'name': Each_Time.name, |
|||
'period_type': Each_Time.period_type, |
|||
'off_reason': Each_Time.off_reason, |
|||
'chair_lines': time_line_list})) |
|||
days_list = [] |
|||
for day_count in range(1, self.no_days+1): |
|||
day_line = {'name': day_count, |
|||
'period_lines': times_list} |
|||
days_list.append((0, 0, day_line)) |
|||
|
|||
month_values = {'name': month_name, |
|||
'month': self.month, |
|||
'year': self.year, |
|||
'day_lines': days_list} |
|||
|
|||
month_obj = self.pool.get('salon.month') |
|||
month_obj.create(self._cr, self._uid, month_values) |
|||
|
|||
|
|||
@api.one |
|||
def close_auto_fill(self): |
|||
pass |
|||
|
@ -0,0 +1,14 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID |
|||
|
|||
|
|||
class Chairs(models.Model): |
|||
_name = 'salon.chair' |
|||
|
|||
name = fields.Char() |
|||
related_employee = fields.Many2one('hr.employee', string='Related Employee') |
|||
|
|||
_sql_constraints = [ |
|||
('name_unique', 'unique(name)', 'This chair is already exist !'), |
|||
('related_employee_unique', 'unique(related_employee)', 'This person was reserved for another chair !')] |
|||
|
|||
|
@ -0,0 +1,78 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID,_ |
|||
from openerp.osv import fields, osv |
|||
|
|||
|
|||
class SaleOrder(models.Model): |
|||
_inherit = 'sale.order' |
|||
|
|||
def action_wait(self, cr, uid, ids, context=None): |
|||
context = context or {} |
|||
for o in self.browse(cr, uid, ids): |
|||
if not any(line.state != 'cancel' for line in o.order_line): |
|||
raise osv.except_osv(_('Error!'),_('You cannot confirm a this booking which has no line.')) |
|||
noprod = self.test_no_product(cr, uid, o, context) |
|||
if (o.order_policy == 'manual') or noprod: |
|||
self.write(cr, uid, [o.id], {'state': 'manual', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)}) |
|||
# ================================================================= |
|||
booking_no = o.name |
|||
values = self.get_values_booking(cr, uid, ids, context)[0] |
|||
for Each_Day in values['month'].day_lines: |
|||
if Each_Day.id == values['day'].id: |
|||
for Each_Time in Each_Day.period_lines: |
|||
if Each_Time.id == values['time'].id: |
|||
for Each_Time_Line in Each_Time.chair_lines: |
|||
if Each_Time_Line.chair_id.id == values['chair'].id: |
|||
print Each_Day.name, Each_Time.name, Each_Time_Line.chair_id.name |
|||
if Each_Time_Line.booked: |
|||
raise osv.except_osv(_('Booking Failed !'),_('Mismatch in booking, this chair may be already booked.')) |
|||
else: |
|||
print 'nooooooooooooo' |
|||
cr.execute("UPDATE salon_period_line SET partner_id = %s,book_no = %s where period_id = %s and chair_id = %s", (str(values['partner'].id), booking_no, str(values['time'].id), str(values['chair'].id))) |
|||
# ================================================================= |
|||
else: |
|||
self.write(cr, uid, [o.id], {'state': 'progress', 'date_confirm': fields.date.context_today(self, cr, uid, context=context)}) |
|||
# ================================================================= |
|||
booking_no = o.name |
|||
values = self.get_values_booking(cr, uid, ids, context)[0] |
|||
for Each_Day in values['month'].day_lines: |
|||
if Each_Day.id == values['day'].id: |
|||
for Each_Time in Each_Day.period_lines: |
|||
if Each_Time.id == values['time'].id: |
|||
for Each_Time_Line in Each_Time.chair_lines: |
|||
if Each_Time_Line.chair_id.id == values['chair'].id: |
|||
print Each_Day.name, Each_Time.name, Each_Time_Line.chair_id.name |
|||
if Each_Time_Line.booked: |
|||
raise osv.except_osv(_('Booking Failed !'),_('Mismatch in booking, this chair may be already booked.')) |
|||
else: |
|||
print 'nooooooooooooo' |
|||
cr.execute("UPDATE salon_period_line SET partner_id = %s,book_no = %s where period_id = %s and chair_id = %s", (str(values['partner'].id), booking_no, str(values['time'].id), str(values['chair'].id))) |
|||
# ================================================================= |
|||
self.pool.get('sale.order.line').button_confirm(cr, uid, [x.id for x in o.order_line if x.state != 'cancel']) |
|||
|
|||
return True |
|||
|
|||
@api.one |
|||
def get_values_booking(self): |
|||
return {'month': self.for_month, |
|||
'day': self.for_day, |
|||
'time': self.for_time, |
|||
'chair': self.char_id, |
|||
'partner': self.partner_id} |
|||
|
|||
|
|||
def action_button_confirm(self, cr, uid, ids, context=None): |
|||
# ====================================== |
|||
# values = self.get_values_booking(cr, uid, ids, context)[0] |
|||
# cr.execute("UPDATE salon_period_line SET partner_id = %s where period_id = %s and chair_id = %s", (str(values['partner'].id), str(values['time'].id), str(values['chair'].id))) |
|||
|
|||
# ====================================== |
|||
if not context: |
|||
context = {} |
|||
assert len(ids) == 1, 'This option should only be used for a single id at a time.' |
|||
self.signal_workflow(cr, uid, ids, 'order_confirm') |
|||
if context.get('send_email'): |
|||
self.force_quotation_send(cr, uid, ids, context=context) |
|||
return True |
|||
|
|||
|
|||
|
@ -0,0 +1,88 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID,_ |
|||
|
|||
|
|||
class Days(models.Model): |
|||
_name = 'salon.day' |
|||
_rec_name = 'display_booked' |
|||
|
|||
name = fields.Integer('Day') |
|||
day_type = fields.Selection([('on', 'On'), ('off', 'Off')], default='on', string='On/Off') |
|||
off_reason = fields.Char() |
|||
period_lines = fields.One2many('salon.period', 'day_id') |
|||
month_id = fields.Many2one('salon.month') |
|||
|
|||
@api.one |
|||
def _get_booked(self): |
|||
count = 0 |
|||
total = 0 |
|||
for Each_Line in self.period_lines: |
|||
if Each_Line.period_type == 'on': |
|||
if Each_Line.booked: |
|||
count += 1 |
|||
total += 1 |
|||
else: |
|||
total += 1 |
|||
|
|||
if count < total: |
|||
self.booked = False |
|||
else: |
|||
self.booked = True |
|||
|
|||
booked = fields.Boolean('Fully Booked', compute='_get_booked') |
|||
|
|||
|
|||
@api.one |
|||
def _get_display_booked(self): |
|||
count = 0 |
|||
for Each_Line in self.period_lines: |
|||
if Each_Line.booked: |
|||
count += 1 |
|||
if count < len(self.period_lines): |
|||
self.display_booked = str(self.name) |
|||
else: |
|||
self.display_booked = str(self.name) + '- Fully Booked' |
|||
|
|||
display_booked = fields.Char(compute='_get_display_booked') |
|||
|
|||
# @api.one |
|||
# def _get_day_stat(self): |
|||
# self.day_stat = self.days.day_type |
|||
# day_stat = fields.Char(compute='_get_day_stat', string='On/Off') |
|||
|
|||
|
|||
|
|||
# |
|||
# day_stat = fields.Selection([('on', 'On'), ('off', 'Off')], default='on') |
|||
|
|||
# period_lines = fields.One2many('salon.day.line', 'day_id') |
|||
# |
|||
# _sql_constraints = [ |
|||
# ('name_unique', 'unique(name)', 'This day is already exist !')] |
|||
# |
|||
# @api.one |
|||
# def get_day(self): |
|||
# if self.name >0 and self.name <= 31: |
|||
# return True |
|||
# else: |
|||
# return False |
|||
# |
|||
# def check_day_valid(self, cr, uid, ids, context=None): |
|||
# return self.get_day(cr, uid, ids, context)[0] |
|||
# |
|||
# _constraints = [ |
|||
# (check_day_valid, 'You created an invalid day', ['name']), |
|||
# ] |
|||
# |
|||
# |
|||
# class DayLines(models.Model): |
|||
# _name = 'salon.day.line' |
|||
# |
|||
# period_id = fields.Many2one('salon.period', string='Time') |
|||
# # @api.one |
|||
# # def _get_period_stat(self): |
|||
# # self.period_stat = self.period_id.period_type |
|||
# |
|||
# # period_stat = fields.Char(compute='_get_period_stat', string='On/Off') |
|||
# day_id = fields.Many2one('salon.day') |
|||
# period_stat = fields.Selection([('on', 'On'), ('off', 'Off')], default='on') |
|||
# |
@ -0,0 +1,112 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID |
|||
|
|||
|
|||
class Months(models.Model): |
|||
_name = 'salon.month' |
|||
_rec_name = 'display_booked' |
|||
|
|||
name = fields.Char('Name') |
|||
|
|||
_sql_constraints = [ |
|||
('name_unique', 'unique(name)', 'This month is already exist !')] |
|||
|
|||
|
|||
month = fields.Integer('Month') |
|||
year = fields.Integer('Year') |
|||
day_lines = fields.One2many('salon.day', 'month_id') |
|||
|
|||
@api.one |
|||
def _get_booked(self): |
|||
count = 0 |
|||
total = 0 |
|||
for Each_Day in self.day_lines: |
|||
if Each_Day.day_type == 'on': |
|||
if Each_Day.booked: |
|||
count += 1 |
|||
total += 1 |
|||
else: |
|||
total += 1 |
|||
|
|||
if count < total: |
|||
self.booked = False |
|||
else: |
|||
self.booked = True |
|||
|
|||
# print 'count', count |
|||
# print 'total', total |
|||
# |
|||
# |
|||
# for Each_Day in self.day_lines: |
|||
# if Each_Day.booked: |
|||
# count += 1 |
|||
# if count < len(self.day_lines): |
|||
# self.booked = False |
|||
# else: |
|||
# self.booked = True |
|||
|
|||
booked = fields.Boolean('Fully Booked', compute='_get_booked', default=False) |
|||
|
|||
@api.one |
|||
def _get_display_booked(self): |
|||
count = 0 |
|||
for Each_Day in self.day_lines: |
|||
if Each_Day.booked: |
|||
count += 1 |
|||
if count < len(self.day_lines): |
|||
self.display_booked = str(self.name) |
|||
else: |
|||
self.display_booked = str(self.name) + ' - Fully Booked' |
|||
|
|||
display_booked = fields.Char(compute='_get_display_booked') |
|||
@api.one |
|||
def _get_month_show(self): |
|||
if self.month == 1: |
|||
self.month_show = 'JAN' |
|||
elif self.month == 2: |
|||
self.month_show = 'FEB' |
|||
elif self.month == 3: |
|||
self.month_show = 'MAR' |
|||
elif self.month == 4: |
|||
self.month_show = 'APR' |
|||
elif self.month == 5: |
|||
self.month_show = 'MAY' |
|||
elif self.month == 6: |
|||
self.month_show = 'JUN' |
|||
elif self.month == 7: |
|||
self.month_show = 'JUL' |
|||
elif self.month == 8: |
|||
self.month_show = 'AUG' |
|||
elif self.month == 9: |
|||
self.month_show = 'SEP' |
|||
elif self.month == 10: |
|||
self.month_show = 'OCT' |
|||
elif self.month == 11: |
|||
self.month_show = 'NOV' |
|||
elif self.month == 12: |
|||
self.month_show = 'DEC' |
|||
else: |
|||
self.month_show = 'None' |
|||
month_show = fields.Char(compute='_get_month_show') |
|||
|
|||
|
|||
|
|||
|
|||
# day_lines = fields.One2many('salon.month.line', 'month_id') |
|||
# |
|||
# |
|||
# class MonthLines(models.Model): |
|||
# _name = 'salon.month.line' |
|||
# |
|||
# days = fields.Many2one('salon.day') |
|||
# month_id = fields.Many2one('salon.month') |
|||
# |
|||
# # @api.one |
|||
# # def _get_day_stat(self): |
|||
# # self.day_stat = self.days.day_type |
|||
# # day_stat = fields.Char(compute='_get_day_stat', string='On/Off') |
|||
# |
|||
# day_stat = fields.Selection([('on', 'On'), ('off', 'Off')], default='on') |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,83 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID,_ |
|||
from openerp.http import request |
|||
|
|||
|
|||
class Period(models.Model): |
|||
_name = 'salon.period' |
|||
_rec_name = 'display_booked' |
|||
|
|||
name = fields.Float('Time') |
|||
|
|||
# _sql_constraints = [ |
|||
# ('name_unique', 'unique(name)', 'This time is already exist !')] |
|||
|
|||
chair_lines = fields.One2many('salon.period.line', 'period_id') |
|||
period_type = fields.Selection([('on', 'On'), ('off', 'Off')], default='on', string='On/Off') |
|||
off_reason = fields.Char() |
|||
day_id = fields.Many2one('salon.day') |
|||
|
|||
@api.one |
|||
def _get_booked(self): |
|||
count = 0 |
|||
for Each_Chair in self.chair_lines: |
|||
if Each_Chair.partner_id.id: |
|||
count += 1 |
|||
if count < len(self.chair_lines): |
|||
self.booked = False |
|||
else: |
|||
self.booked = True |
|||
booked = fields.Boolean('Fully Booked', compute='_get_booked') |
|||
|
|||
@api.one |
|||
def _get_display_booked(self): |
|||
count = 0 |
|||
for Each_Chair in self.chair_lines: |
|||
if Each_Chair.partner_id.id: |
|||
count += 1 |
|||
if count < len(self.chair_lines): |
|||
self.display_booked = str(self.name) |
|||
else: |
|||
self.display_booked = str(self.name) + ' -Fully Booked' |
|||
|
|||
|
|||
|
|||
display_booked = fields.Char(compute='_get_display_booked') |
|||
# @api.onchange('chair_lines') |
|||
# def unique_chair(self): |
|||
# # GET VALUE TO CHILD CHAIR |
|||
# selected_chair = str(request.session.get('onchange_chair_selected')) |
|||
# request.session['onchange_chair_selected'] = None |
|||
# already_exist = 0 |
|||
# for Each_Chair in self.chair_lines: |
|||
# if Each_Chair.chair_id.name == selected_chair: |
|||
# already_exist += 1 |
|||
# if already_exist >= 2: |
|||
# return {'warning': { |
|||
# 'title': _('Constraint Error'), |
|||
# 'message': 'This chair is already selected for this period', |
|||
# }} |
|||
|
|||
|
|||
class PeriodLine(models.Model): |
|||
_name = 'salon.period.line' |
|||
|
|||
chair_id = fields.Many2one('salon.chair', string='Chair') |
|||
period_id = fields.Many2one('salon.period') |
|||
partner_id = fields.Many2one('res.partner', string='Customer') |
|||
|
|||
@api.one |
|||
def _get_related_emp(self): |
|||
self.related_employee = self.chair_id.related_employee |
|||
related_employee = fields.Many2one('hr.employee', compute='_get_related_emp', string='Dressing Person') |
|||
|
|||
@api.one |
|||
def _get_booked(self): |
|||
if self.partner_id: |
|||
self.booked = True |
|||
else: |
|||
self.booked = False |
|||
booked = fields.Boolean('Booked', compute='_get_booked') |
|||
book_no = fields.Char('Booking No', default=' ') |
|||
|
|||
|
|||
|
@ -0,0 +1,161 @@ |
|||
from openerp import models, fields,api,http,SUPERUSER_ID, _ |
|||
from openerp.addons.sale.sale import sale_order |
|||
from openerp.http import request |
|||
from datetime import timedelta |
|||
from dateutil import parser |
|||
|
|||
|
|||
class SaleOrder(models.Model): |
|||
_inherit = 'sale.order' |
|||
|
|||
@api.one |
|||
@api.onchange('char_id') |
|||
def onchange_chair(self): |
|||
self.employee_id = self.char_id.related_employee |
|||
|
|||
@api.one |
|||
@api.onchange('employee_id') |
|||
def onchange_employee(self): |
|||
have_any = False |
|||
for Each_Chair in self.env['salon.chair'].search([]): |
|||
if self.employee_id == Each_Chair.related_employee: |
|||
have_any = Each_Chair |
|||
self.char_id = have_any |
|||
|
|||
employee_id = fields.Many2one('hr.employee', 'Dressing Person', store=True) |
|||
char_id = fields.Many2one('salon.chair', string='Chair') |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('sent', 'Sent'), |
|||
('cancel', 'Cancelled'), |
|||
('waiting_date', 'Waiting Schedule'), |
|||
('progress', 'Scheduled'), |
|||
('manual', 'To Invoice'), |
|||
('shipping_except', 'Shipping Exception'), |
|||
('invoice_except', 'Invoice Exception'), |
|||
('done', 'Done'), |
|||
], 'Status', readonly=True, copy=False, help="Gives the status of the quotation or sales order.\ |
|||
\nThe exception status is automatically set when a cancel operation occurs \ |
|||
in the invoice validation (Invoice Exception) or in the picking list process (Shipping Exception).\nThe 'Waiting Schedule' status is set when the invoice is confirmed\ |
|||
but waiting for the scheduler to run on the order date.", select=True) |
|||
name = fields.Char('Order Reference', required=True, copy=False, |
|||
readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True) |
|||
order_line = fields.One2many('sale.order.line', 'order_id', 'Items', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, copy=True) |
|||
|
|||
@api.onchange('name') |
|||
def onchange_name(self): |
|||
request.session['name_schedule'] = self.name |
|||
|
|||
def create(self, cr, uid, vals, context=None): |
|||
if context is None: |
|||
context = {} |
|||
if vals.get('name', '/') == '/': |
|||
vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order', context=context) or '/' |
|||
# ==================================================================================== |
|||
vals['name'] = vals['name'].replace('SO', 'NO-') |
|||
if str(request.session.get('name_schedule')) == '/': |
|||
vals['name'] = str(vals['name']) |
|||
else: |
|||
vals['name'] = str(vals['name']) + ' ' + str(request.session.get('name_schedule')) |
|||
request.session['name_schedule'] = None |
|||
# ==================================================================================== |
|||
if vals.get('partner_id') and any(f not in vals for f in ['partner_invoice_id', 'partner_shipping_id', 'pricelist_id', 'fiscal_position']): |
|||
defaults = self.onchange_partner_id(cr, uid, [], vals['partner_id'], context=context)['value'] |
|||
if not vals.get('fiscal_position') and vals.get('partner_shipping_id'): |
|||
delivery_onchange = self.onchange_delivery_id(cr, uid, [], vals.get('company_id'), None, vals['partner_id'], vals.get('partner_shipping_id'), context=context) |
|||
defaults.update(delivery_onchange['value']) |
|||
vals = dict(defaults, **vals) |
|||
ctx = dict(context or {}, mail_create_nolog=True) |
|||
new_id = super(sale_order, self).create(cr, uid, vals, context=ctx) |
|||
self.message_post(cr, uid, [new_id], body=_("Quotation created"), context=ctx) |
|||
return new_id |
|||
|
|||
@api.one |
|||
def get_warning(self): |
|||
if self.for_month.booked: |
|||
self.for_month = False |
|||
self.month_state_show = ' ' \ |
|||
' ' \ |
|||
'Sorry, this month is fully booked' |
|||
else: |
|||
self.month_state_show = '' |
|||
|
|||
@api.one |
|||
def get_warning_for_day(self): |
|||
if self.for_day.booked: |
|||
self.for_day = False |
|||
self.month_state_show = ' ' \ |
|||
' ' \ |
|||
'Sorry, this day is fully booked' |
|||
else: |
|||
self.month_state_show = ' ' |
|||
|
|||
@api.one |
|||
def get_warning_for_time(self): |
|||
if self.for_time.booked: |
|||
self.for_time = False |
|||
self.month_state_show = ' ' \ |
|||
' ' \ |
|||
'Sorry, this time is fully booked' |
|||
else: |
|||
self.month_state_show = ' ' |
|||
@api.one |
|||
def get_selected_month(self): |
|||
return self.for_month.id |
|||
|
|||
@api.onchange('for_month') |
|||
def onchange_month(self): |
|||
# ====clear=other=fields========= |
|||
self.for_day = False |
|||
self.char_id = False |
|||
self.for_time = False |
|||
# =============================== |
|||
self.get_warning() |
|||
return {'domain': {'for_day': [('month_id', '=', self.get_selected_month()), |
|||
('day_type', '=', 'on'), |
|||
('booked', '=', False)]}} |
|||
|
|||
@api.one |
|||
def get_selected_day(self): |
|||
return self.for_day.id |
|||
|
|||
@api.onchange('for_day') |
|||
def onchange_day(self): |
|||
# ===Clear=other=fields======= |
|||
self.char_id = False |
|||
self.for_time = False |
|||
# ============================ |
|||
self.get_warning_for_day() |
|||
# for i in self.env['salon.period'].search([]): |
|||
# if i.day_id.id == False: |
|||
# print 'kkkkkkkk' |
|||
selected_day = self.get_selected_day() |
|||
if selected_day[0]: |
|||
print '' |
|||
else: |
|||
selected_day = -1 |
|||
|
|||
return {'domain': {'for_time': [('day_id', '=', selected_day), ('period_type', '=', 'on')]}} |
|||
|
|||
@api.one |
|||
def get_selected_time(self): |
|||
return self.for_time |
|||
|
|||
@api.onchange('for_time') |
|||
def onchange_time(self): |
|||
# ===Clear=other=fields======= |
|||
self.char_id = False |
|||
# ============================ |
|||
self.get_warning_for_time() |
|||
chair_ids = [] |
|||
for Each_Period_line in self.get_selected_time()[0].chair_lines: |
|||
if Each_Period_line.booked: |
|||
chair_ids.append(Each_Period_line.chair_id.id) |
|||
return {'domain': {'char_id': [('id', 'not in', chair_ids)]}} |
|||
|
|||
|
|||
created_domain = [('booked', '=', False)] |
|||
for_month = fields.Many2one('salon.month', domain=created_domain) |
|||
for_day = fields.Many2one('salon.day', domain=[('month_id', '=', -1)]) |
|||
for_time = fields.Many2one('salon.period', domain=[('day_id', 'in', [-69]), [('day_id', '!=', None)]]) |
|||
month_state_show = fields.Char(default=' ') |
|
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 18 KiB |