Browse Source

Fixes #17

pull/81/head
Hilar AK 8 years ago
parent
commit
93c2bcff00
  1. 3
      salon_management/__openerp__.py
  2. 16
      salon_management/models/salon_booking.py
  3. 17
      salon_management/models/salon_management.py
  4. 34
      salon_management/security/ir.model.access.csv
  5. 35
      salon_management/security/salon_security.xml
  6. 113
      salon_management/static/src/js/salon_booking.js
  7. 21
      salon_management/views/salon_bookings.xml
  8. 6
      salon_management/views/salon_data.xml
  9. 4
      salon_management/views/salon_management_chair.xml

3
salon_management/__openerp__.py

@ -23,7 +23,7 @@
{
'name': 'Beauty Spa Management',
'summary': """Beauty Parlour Management with Online Booking System""",
'version': '9.0.1.1.0',
'version': '9.0.2.0.0',
'author': 'Cybrosys Techno Solutions',
'website': "http://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
@ -40,6 +40,7 @@
'views/salon_email_template.xml',
'views/salon_config.xml',
'views/working_hours.xml',
'security/salon_security.xml',
'security/ir.model.access.csv',
],
'demo': [

16
salon_management/models/salon_booking.py

@ -93,16 +93,14 @@ class SalonBookingWeb(http.Controller):
booking_info = kwargs.get('salon_data')
name = booking_info[0]
date = booking_info[1]
phone = booking_info[2]
email = booking_info[3]
services = booking_info[4]
chair = booking_info[5]
time = booking_info[2]
phone = booking_info[3]
email = booking_info[4]
services = booking_info[5]
chair = booking_info[6]
salon_service_obj = request.env['salon.service'].search([('id', 'in', services)])
date = str(date)
dates = date[0:10]
time = date[11:16]
dates_time = dates+" "+time+":00"
date_and_time = datetime.strptime(dates_time, '%Y-%m-%d %H:%M:%S')
dates_time = date+" "+time+":00"
date_and_time = datetime.strptime(dates_time, '%m/%d/%Y %H:%M:%S')
salon_booking = request.registry['salon.booking']
booking_data = {
'name': name,

17
salon_management/models/salon_management.py

@ -24,6 +24,7 @@ from openerp import models, fields, api
from datetime import date, datetime, timedelta
from openerp.tools.translate import _
from openerp.exceptions import UserError, ValidationError
from openerp.http import request
class PartnerSalon(models.Model):
@ -33,9 +34,9 @@ class PartnerSalon(models.Model):
partner_salon = fields.Boolean(string="Is a Salon Partner")
class CompanySalon(models.Model):
class SequenceUpdaterSalon(models.Model):
_inherit = 'res.company'
_name = 'salon.sequence.updater'
sequence_salon = fields.Char(string="Salon Sequence")
@ -51,7 +52,7 @@ class SalonChair(models.Model):
_name = 'salon.chair'
name = fields.Char(string="Chair", required=True,
default=lambda self: self.env['res.company'].browse(1).sequence_salon or "Chair-1")
default=lambda self: self.env['salon.sequence.updater'].browse(1).sequence_salon or "Chair-1n")
number_of_orders = fields.Integer(string="No.of Orders")
collection_today = fields.Float(string="Today's Collection")
user_of_chair = fields.Many2one('res.users', string="User", readonly=True,
@ -61,12 +62,14 @@ class SalonChair(models.Model):
user_line = fields.One2many('salon.chair.user', 'salon_chair', string="Users")
total_time_taken_chair = fields.Float(string="Time Reserved(Hrs)")
active_booking_chairs = fields.Boolean(string="Active booking chairs")
chair_created_user = fields.Integer(string="Salon Chair Created User",
default=lambda self: self._uid)
@api.model
def create(self, cr):
sequence_code = 'chair.sequence'
sequence_number = self.env['ir.sequence'].next_by_code(sequence_code)
self.env['res.company'].browse(1).write({'sequence_salon': sequence_number})
self.env['salon.sequence.updater'].browse(1).write({'sequence_salon': sequence_number})
if 'user_line' in cr.keys():
if cr['user_line']:
date_changer = []
@ -165,9 +168,7 @@ class SalonOrder(models.Model):
order.time_taken_total = total_time_taken
time_takes = total_time_taken
hours = int(time_takes)
minutes = 0.0
if time_takes != 0:
minutes = (time_takes % int(time_takes))*60
minutes = (time_takes - hours)*60
start_time_store = datetime.strptime(self.start_time, "%Y-%m-%d %H:%M:%S")
self.write({'end_time': start_time_store + timedelta(hours=hours, minutes=minutes)})
if self.end_time:
@ -203,6 +204,8 @@ class SalonOrder(models.Model):
start_time_only = fields.Char(string="Start Time Only")
end_time_only = fields.Char(string="End Time Only")
chair_user = fields.Many2one('res.users', string="Chair User")
salon_order_created_user = fields.Integer(string="Salon Order Created User",
default=lambda self: self._uid)
@api.onchange('start_time')
def start_date_change(self):

34
salon_management/security/ir.model.access.csv

@ -1,6 +1,30 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
view_salon_order,view.salon.order,model_salon_order,base.group_user,1,1,1,1
view_salon_order_lines,view.salon.order.lines,model_salon_order_lines,base.group_user,1,1,1,1
view_salon_stages,view.salon.stages,model_salon_stages,base.group_user,1,1,1,1
view_salon_chair,view.salon.chair,model_salon_chair,base.group_user,1,1,1,1
view_salon_service,view.salon.service,model_salon_service,base.group_user,1,1,1,1
view_salon_order1,view.salon.order1,model_salon_order,salon_management.group_salon_user,1,1,0,0
view_salon_order_lines1,view.salon.order.lines1,model_salon_order_lines,salon_management.group_salon_user,1,1,1,0
view_salon_stages1,view.salon.stages1,model_salon_stages,salon_management.group_salon_user,1,0,0,0
view_salon_chair1,view.salon.chair1,model_salon_chair,salon_management.group_salon_user,1,1,0,0
view_salon_service1,view.salon.service1,model_salon_service,salon_management.group_salon_user,1,1,1,0
view_res_users1,view.res.users1,base.model_res_users,salon_management.group_salon_user,1,0,0,0
view_salon_booking1,view.salon.booking1,model_salon_booking,salon_management.group_salon_user,0,0,0,0
view_res_company1,view.res.company1,model_res_company,salon_management.group_salon_user,1,0,0,0
view_salon_working_hours1,view.salon.working.hours1,model_salon_working_hours,salon_management.group_salon_user,0,0,0,0
view_salon_holiday1,view.salon.holiday1,model_salon_holiday,salon_management.group_salon_user,0,0,0,0
view_salon_config_settings1,view.salon.config.settings1,model_salon_config_settings,salon_management.group_salon_user,0,0,0,0
view_res_partner1,view.res.partner1,model_res_partner,salon_management.group_salon_user,0,0,0,0
view_salon_chair_user1,view.salon.chair.user1,model_salon_chair_user,salon_management.group_salon_user,0,0,0,0
view_salon_sequence_updater1,view.salon.sequence.updater1,model_salon_sequence_updater,salon_management.group_salon_user,1,0,0,0
view_salon_order,view.salon.order,model_salon_order,salon_management.group_salon_manager,1,1,1,1
view_salon_order_lines,view.salon.order.lines,model_salon_order_lines,salon_management.group_salon_manager,1,1,1,1
view_salon_stages,view.salon.stages,model_salon_stages,salon_management.group_salon_manager,1,1,1,1
view_salon_chair,view.salon.chair,model_salon_chair,salon_management.group_salon_manager,1,1,1,1
view_salon_service,view.salon.service,model_salon_service,salon_management.group_salon_manager,1,1,1,1
view_salon_booking,view.salon.booking,model_salon_booking,salon_management.group_salon_manager,1,1,1,1
view_res_company,view.res.company,model_res_company,salon_management.group_salon_manager,1,1,1,1
view_salon_working_hours,view.salon.working.hours,model_salon_working_hours,salon_management.group_salon_manager,0,0,0,0
view_salon_holiday,view.salon.holiday,model_salon_holiday,salon_management.group_salon_manager,0,0,0,0
view_salon_config_settings,view.salon.config.settings,model_salon_config_settings,salon_management.group_salon_manager,0,0,0,0
view_res_partner,view.res.partner,model_res_partner,salon_management.group_salon_manager,1,1,1,1
view_res_users,view.res.users,model_res_users,salon_management.group_salon_manager,1,1,1,1
view_salon_chair_user,view.salon.chair.user,model_salon_chair_user,salon_management.group_salon_manager,1,1,1,1
view_salon_sequence_updater,view.salon.sequence.updater,model_salon_sequence_updater,salon_management.group_salon_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 view_salon_order view_salon_order1 view.salon.order view.salon.order1 model_salon_order base.group_user salon_management.group_salon_user 1 1 1 0 1 0
3 view_salon_order_lines view_salon_order_lines1 view.salon.order.lines view.salon.order.lines1 model_salon_order_lines base.group_user salon_management.group_salon_user 1 1 1 1 0
4 view_salon_stages view_salon_stages1 view.salon.stages view.salon.stages1 model_salon_stages base.group_user salon_management.group_salon_user 1 1 0 1 0 1 0
5 view_salon_chair view_salon_chair1 view.salon.chair view.salon.chair1 model_salon_chair base.group_user salon_management.group_salon_user 1 1 1 0 1 0
6 view_salon_service view_salon_service1 view.salon.service view.salon.service1 model_salon_service base.group_user salon_management.group_salon_user 1 1 1 1 0
7 view_res_users1 view.res.users1 base.model_res_users salon_management.group_salon_user 1 0 0 0
8 view_salon_booking1 view.salon.booking1 model_salon_booking salon_management.group_salon_user 0 0 0 0
9 view_res_company1 view.res.company1 model_res_company salon_management.group_salon_user 1 0 0 0
10 view_salon_working_hours1 view.salon.working.hours1 model_salon_working_hours salon_management.group_salon_user 0 0 0 0
11 view_salon_holiday1 view.salon.holiday1 model_salon_holiday salon_management.group_salon_user 0 0 0 0
12 view_salon_config_settings1 view.salon.config.settings1 model_salon_config_settings salon_management.group_salon_user 0 0 0 0
13 view_res_partner1 view.res.partner1 model_res_partner salon_management.group_salon_user 0 0 0 0
14 view_salon_chair_user1 view.salon.chair.user1 model_salon_chair_user salon_management.group_salon_user 0 0 0 0
15 view_salon_sequence_updater1 view.salon.sequence.updater1 model_salon_sequence_updater salon_management.group_salon_user 1 0 0 0
16 view_salon_order view.salon.order model_salon_order salon_management.group_salon_manager 1 1 1 1
17 view_salon_order_lines view.salon.order.lines model_salon_order_lines salon_management.group_salon_manager 1 1 1 1
18 view_salon_stages view.salon.stages model_salon_stages salon_management.group_salon_manager 1 1 1 1
19 view_salon_chair view.salon.chair model_salon_chair salon_management.group_salon_manager 1 1 1 1
20 view_salon_service view.salon.service model_salon_service salon_management.group_salon_manager 1 1 1 1
21 view_salon_booking view.salon.booking model_salon_booking salon_management.group_salon_manager 1 1 1 1
22 view_res_company view.res.company model_res_company salon_management.group_salon_manager 1 1 1 1
23 view_salon_working_hours view.salon.working.hours model_salon_working_hours salon_management.group_salon_manager 0 0 0 0
24 view_salon_holiday view.salon.holiday model_salon_holiday salon_management.group_salon_manager 0 0 0 0
25 view_salon_config_settings view.salon.config.settings model_salon_config_settings salon_management.group_salon_manager 0 0 0 0
26 view_res_partner view.res.partner model_res_partner salon_management.group_salon_manager 1 1 1 1
27 view_res_users view.res.users model_res_users salon_management.group_salon_manager 1 1 1 1
28 view_salon_chair_user view.salon.chair.user model_salon_chair_user salon_management.group_salon_manager 1 1 1 1
29 view_salon_sequence_updater view.salon.sequence.updater model_salon_sequence_updater salon_management.group_salon_manager 1 1 1 1
30

35
salon_management/security/salon_security.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record model="ir.module.category" id="module_category_salon_management">
<field name="name">Salon Management</field>
<field name="description">Manager and User Level Access For Beauty Spa Management</field>
<field name="sequence">12</field>
</record>
<record id="group_salon_user" model="res.groups">
<field name="name">User</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="category_id" ref="module_category_salon_management"/>
</record>
<record id="group_salon_manager" model="res.groups">
<field name="name">Manager</field>
<field name="implied_ids" eval="[(4, ref('group_salon_user'))]"/>
<field name="category_id" ref="module_category_salon_management"/>
</record>
</data>
<data noupdate="1">
<record id="salon_order_comp_rule" model="ir.rule">
<field name="name">Salon Orders</field>
<field name="model_id" ref="model_salon_order"/>
<field name="global" eval="True"/>
<field name="domain_force">[('salon_order_created_user','=',user.id)]</field>
</record>
<record id="salon_chair_comp_rule" model="ir.rule">
<field name="name">Salon chairs</field>
<field name="model_id" ref="model_salon_chair"/>
<field name="global" eval="True"/>
<field name="domain_force">[('chair_created_user','=',user.id)]</field>
</record>
</data>
</openerp>

113
salon_management/static/src/js/salon_booking.js

@ -4,38 +4,105 @@ var ajax = require('web.ajax');
$(document).on('click',"#submit_button",function() {
var name = $( "#name" ).val();
var date = $( "#date" ).val();
var time = $( "#time" ).val();
var phone = $( "#phone" ).val();
var email = $( "#email" ).val();
var service = $( "#service" ).val();
var chair = $( "#chair" ).val();
if (name != "" && date != "" && phone != "" && email != "" && service != "" && chair != "")
{
var booking_record = [name, date, phone, email, service, chair];
var salon_record = ajax.jsonRpc("/page/salon_details", 'call', {'salon_data':booking_record })
.then(function(){
window.location= "/page/salon_management.salon_booking_thank_you"
})
var time_left_char = time.substring(0, 2)
var time_right_char = time.substring(3, 5)
var time_separator = time.substring(2,3)
var date_day = date.substring(3,5)
var date_month = date.substring(0,2)
var date_year = date.substring(6,10)
var slash_one = date.substring(2,3)
var slash_two = date.substring(5,6)
if ((date_day < 32) && (date_day > 0) && (date_month < 13) && (date_month > 0) &&
(date_year > 2016) && (slash_one == "/") && (slash_two == "/")){
var correct_date = 0
if([1,3,5,7,8,10,12].indexOf(date_month) == -1){
if(date_month == 2){
if((date_year % 4) == 0){
if(date_day < 30){
correct_date = 1
}
else{
alert("Selected February Has 29 Days Only.")
}
}
else{
if(date_day < 29){
correct_date = 1
}
else{
alert("Selected February Has 28 Days Only.")
}
}
}
else{
if(date_day < 31){
correct_date = 1
}
else{
alert("Selected Month Have 30 Days Only")
}
}
}
else{
if(date_day < 32){
correct_date = 1
}
else{
alert("Selected Month Have 31 Days Only")
}
}
}
else
{
alert("Fill all the required fields")
else{
if(date != ""){
alert("Select a valid Date")
}
}
});
if(date != ""){
if (isNaN(time_left_char) || isNaN(time_right_char) || time_separator != ":"){
if(time != ""){
alert("Select a valid Time")
}
}
else{
var time_left = parseInt(time_left_char)
var time_right = parseInt(time_right_char)
if ((time_left < 24) && (time_right < 60) && (time_left >= 0) && (time_right >= 0)){
if (name != "" && phone != "" && email != "" && service != "" && chair != ""){
var booking_record = [name, date, time, phone, email, service, chair];
var salon_record = ajax.jsonRpc("/page/salon_details", 'call', {'salon_data':booking_record })
.then(function(){
window.location= "/page/salon_management.salon_booking_thank_you"
})
}
else{
alert("Fill all the required fields")
}
}
else{
alert("Select a valid time")
}
}
}
});
$(document).on('click',"#check_button",function() {
var check_date = $( "#check_date" ).val();
if (check_date != "")
{
var salon_check_date = ajax.jsonRpc("/page/salon_check_date", 'call', {'check_date':check_date })
.then(function(date_info){
window.location= "/page/salon_management.salon_booking_form?x=" + date_info
})
}
{
var salon_check_date = ajax.jsonRpc("/page/salon_check_date", 'call', {'check_date':check_date })
.then(function(date_info){
window.location= "/page/salon_management.salon_booking_form?x=" + date_info
})
}
else
{
alert("Fill the Field")
}
});
{
alert("Fill the Field")
}
});
});

21
salon_management/views/salon_bookings.xml

@ -14,6 +14,12 @@
</xpath>
</template>
<template id="salon_booking_form" name="Salon Booking" page="True">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
<link rel="stylesheet" href="/resources/demos/style.css"/>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>$( function() {$( "#date" ).datepicker();} );</script>
<script>$( function() {$( "#check_date" ).datepicker();} );</script>
<t t-call="website.layout">
<div class="container">
<h1 style="text-align:center;padding-bottom: 26px;padding-top: 20px;">Book Your Chair</h1>
@ -26,7 +32,6 @@
</div>
</div>
</div>
<div class="form-group form-field o_website_form_required_custom">
<div class="col-md-12" style="margin-bottom:10px;">
<label class="col-md-offset-1 col-md-1 col-sm-4 control-label" style="padding-top: 8px;" for="search">SERVICE*</label>
@ -41,14 +46,16 @@
</div>
</div>
</div>
<div class="form-group form-field o_website_form_required_custom">
<div class="col-md-12" style="margin-bottom:10px;">
<label class="col-md-offset-1 col-md-1 col-sm-4 control-label" style="padding-top: 8px;" for="search">TIME*</label>
<div class="col-md-5 col-sm-8">
<input type="datetime-local" id="date" class="search-query form-control oe_search_box" required="True" placeholder="Choose your preferred time"/>
<input type="text" id="date" placeholder="dd/mm/yyyy"
onkeyup="var v = this.value;if (v.match(/^\d{2}$/) !== null) {this.value = v + '/';} else if (v.match(/^\d{2}\/\d{2}$/) !== null) {this.value = v + '/';}" maxlength="10"
style="width: 250px;height: 35px;"/>
<input type="text" id="time" placeholder="HH:MM"
onkeyup="var v = this.value;if (v.match(/^\d{2}$/) !== null) {this.value = v + ':';}" maxlength="5"
style="width: 178px;height: 35px;"/>
</div>
<div class="col-md-5" style="padding-left:0px !important;">
<p style="font-size: 16px;padding-top: 9px;">( Select a date and time based on the availability of the chair )</p>
@ -96,7 +103,6 @@
</div>
</form>
</div>
<div class="container">
<h1 style="text-align:center;">Working Time</h1>
<div>
@ -132,7 +138,7 @@
<div class="col-md-12" style="margin-bottom:10px;">
<label class="col-md-1 col-sm-4 control-label" style="padding-top: 8px; padding-right:0px !important" for="search">TIME</label>
<div class="col-md-2 col-sm-4" style="padding-left: 0px;">
<input style="padding-right:0px;" type="date" id="check_date" class="search-query form-control oe_search_box" required="" placeholder="Select a date"/>
<input style="padding-right:0px;" id="check_date" type="text" class="search-query form-control oe_search_box" required="" placeholder="Select a date"/>
</div>
<div class="col-sm-2 col-md-1" style="padding-left: 0px;" >
<button type="submit" id="check_button" class="btn btn-primary btn-md o_website_form_send">Check</button>
@ -150,7 +156,6 @@
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div t-foreach="chair_details" t-as="chair_obj">

6
salon_management/views/salon_data.xml

@ -56,4 +56,10 @@
</record>
</data>
<data noupdate="1">
<record model="salon.sequence.updater" id="salon_sequence_updater_01">
<field name="name">Salon Sequence Updater</field>
<field name="sequence_salon">Chair-1</field>
</record>
</data>
</openerp>

4
salon_management/views/salon_management_chair.xml

@ -11,12 +11,12 @@
</record>
</data>
<data>
<record forcecreate="True" id="ir_cron_collection_today" model="ir.cron">
<record forcecreate="True" id="ir_cron_collections_today" model="ir.cron">
<field name="name">Collection Today</field>
<field eval="True" name="active" />
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">minutes</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
<field eval="'salon.chair'" name="model" />

Loading…
Cancel
Save