diff --git a/salon_management/__openerp__.py b/salon_management/__openerp__.py index 0790fdc41..266b44236 100644 --- a/salon_management/__openerp__.py +++ b/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': [ diff --git a/salon_management/models/salon_booking.py b/salon_management/models/salon_booking.py index da3cde90a..144534147 100644 --- a/salon_management/models/salon_booking.py +++ b/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, diff --git a/salon_management/models/salon_management.py b/salon_management/models/salon_management.py index df4b7e73a..d297ff8ff 100644 --- a/salon_management/models/salon_management.py +++ b/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): diff --git a/salon_management/security/ir.model.access.csv b/salon_management/security/ir.model.access.csv index ab56a9295..651682ad7 100644 --- a/salon_management/security/ir.model.access.csv +++ b/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 \ No newline at end of file +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 \ No newline at end of file diff --git a/salon_management/security/salon_security.xml b/salon_management/security/salon_security.xml new file mode 100644 index 000000000..8d5bd0dc6 --- /dev/null +++ b/salon_management/security/salon_security.xml @@ -0,0 +1,35 @@ + + + + + Salon Management + Manager and User Level Access For Beauty Spa Management + 12 + + + User + + + + + Manager + + + + + + + + Salon Orders + + + [('salon_order_created_user','=',user.id)] + + + Salon chairs + + + [('chair_created_user','=',user.id)] + + + diff --git a/salon_management/static/src/js/salon_booking.js b/salon_management/static/src/js/salon_booking.js index 6ee673899..1517fa9d0 100644 --- a/salon_management/static/src/js/salon_booking.js +++ b/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") + } }); - - +}); \ No newline at end of file diff --git a/salon_management/views/salon_bookings.xml b/salon_management/views/salon_bookings.xml index f1fe33aab..d6f048c28 100644 --- a/salon_management/views/salon_bookings.xml +++ b/salon_management/views/salon_bookings.xml @@ -14,6 +14,12 @@