You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							163 lines
						
					
					
						
							6.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							163 lines
						
					
					
						
							6.7 KiB
						
					
					
				
								# -*- coding: utf-8 -*-
							 | 
						|
								##############################################################################
							 | 
						|
								#
							 | 
						|
								#    Cybrosys Technologies Pvt. Ltd.
							 | 
						|
								#    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
							 | 
						|
								#
							 | 
						|
								#    you can modify it under the terms of the GNU LESSER
							 | 
						|
								#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
							 | 
						|
								#
							 | 
						|
								#    It is forbidden to publish, distribute, sublicense, or sell copies
							 | 
						|
								#    of the Software or modified copies of the Software.
							 | 
						|
								#
							 | 
						|
								#    This program is distributed in the hope that it will be useful,
							 | 
						|
								#    but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						|
								#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						|
								#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
							 | 
						|
								#
							 | 
						|
								#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
							 | 
						|
								#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
							 | 
						|
								#    If not, see <http://www.gnu.org/licenses/>.
							 | 
						|
								#
							 | 
						|
								##############################################################################
							 | 
						|
								
							 | 
						|
								from odoo import models, fields, api, _
							 | 
						|
								from odoo.exceptions import ValidationError
							 | 
						|
								from datetime import date
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class CabLog(models.Model):
							 | 
						|
								    _name = 'cab.log'
							 | 
						|
								    _inherit = ['mail.thread', 'ir.needaction_mixin']
							 | 
						|
								    _description = 'Cab'
							 | 
						|
								
							 | 
						|
								    name = fields.Many2one('cab.management', string="Name", store=True, required=True)
							 | 
						|
								    cab_log_date = fields.Date(string="Date", default=date.today(), required=True)
							 | 
						|
								    fuel_used = fields.Float(string="Fuel Used", required=True, help="To get total fuel used in Litre")
							 | 
						|
								    seat_capacity = fields.Integer(string="Seat Capacity", related="name.seating_capacity")
							 | 
						|
								    seat_available = fields.Integer(string="Seat Available")
							 | 
						|
								    cab_location = fields.Char(string="Destination Point", required=True)
							 | 
						|
								    cab_location_from = fields.Char(string="Starting Point", required=True)
							 | 
						|
								    seat_booked = fields.Integer(string="How many seats you need to book?", required=True)
							 | 
						|
								    odo_metre = fields.Float(string="OdoMetre Reading", required=True, help="Total distance covered in Km")
							 | 
						|
								    cab_expense = fields.Float(string="Expense", required=True)
							 | 
						|
								    cab_log_timing = fields.Many2one('cab.time', string="Time", required=True)
							 | 
						|
								    total_passenger = fields.Integer(string="Total Passenger", required=True)
							 | 
						|
								    partner_id = fields.Many2one('res.users', string="Customer Name", required=True)
							 | 
						|
								    cab_image = fields.Binary(string='Image', store=True, attachment=True)
							 | 
						|
								    state = fields.Selection([
							 | 
						|
								        ('draft', 'Draft'),
							 | 
						|
								        ('approved', 'Approved'),
							 | 
						|
								        ('discard', 'Discard'),
							 | 
						|
								        ('cancel', 'Cancelled'),
							 | 
						|
								        ('done', 'Done')
							 | 
						|
								    ], default='draft')
							 | 
						|
								
							 | 
						|
								    @api.onchange('name')
							 | 
						|
								    def change_location(self):
							 | 
						|
								        for records in self.env['cab.timing'].search([('name.name', '=', self.name.name)]):
							 | 
						|
								            if self.name.name == records.name.name:
							 | 
						|
								                self.cab_location = records.cab_route_to.name
							 | 
						|
								                self.cab_location_from = records.cab_route.name
							 | 
						|
								
							 | 
						|
								    @api.one
							 | 
						|
								    @api.constrains('cab_log_timing')
							 | 
						|
								    def change_time(self):
							 | 
						|
								        for records in self.env['cab.timing'].search([('name.name', '=', self.name.name)]):
							 | 
						|
								            if self.cab_log_timing:
							 | 
						|
								                if self.cab_log_timing not in records.cab_time:
							 | 
						|
								                    raise ValidationError("No cabs available at given time")
							 | 
						|
								
							 | 
						|
								    @api.one
							 | 
						|
								    @api.constrains('seat_booked')
							 | 
						|
								    def error_message(self):
							 | 
						|
								        if self.seat_available < self.seat_booked:
							 | 
						|
								            raise ValidationError("No Available Seats")
							 | 
						|
								        elif self.seat_booked != self.total_passenger:
							 | 
						|
								            raise ValidationError("No of seat requested for booking and total passenger must be equal")
							 | 
						|
								
							 | 
						|
								    @api.onchange('seat_booked')
							 | 
						|
								    def change_total_passenger(self):
							 | 
						|
								        self.total_passenger = self.seat_booked
							 | 
						|
								
							 | 
						|
								    @api.one
							 | 
						|
								    def action_approve(self):
							 | 
						|
								        self.state = "approved"
							 | 
						|
								
							 | 
						|
								    @api.one
							 | 
						|
								    def action_cancel(self):
							 | 
						|
								        self.state = "cancel"
							 | 
						|
								
							 | 
						|
								    @api.one
							 | 
						|
								    def action_discard(self):
							 | 
						|
								        self.state = "discard"
							 | 
						|
								
							 | 
						|
								    @api.onchange('cab_log_date', 'state')
							 | 
						|
								    def auto_cabs_approve(self):
							 | 
						|
								        for data in self.env['cab.configuration'].search([]):
							 | 
						|
								            if data.auto_approve != False:
							 | 
						|
								                user_obj = self.env.user
							 | 
						|
								                if user_obj == data.cab_manager:
							 | 
						|
								                    self.state = 'approved'
							 | 
						|
								
							 | 
						|
								    @api.onchange('cab_log_date', 'name', 'cab_log_timing')
							 | 
						|
								    def change_available_seat(self):
							 | 
						|
								        for data in self.env['cab.management'].search([('name', '=', self.name.name)]):
							 | 
						|
								            flag = 0
							 | 
						|
								            total_seat_booked = 0
							 | 
						|
								            for records in self.env['cab.log'].search([('name.name', '=', data.name)]):
							 | 
						|
								                if self.cab_log_date == records.cab_log_date and self.cab_log_timing == records.cab_log_timing:
							 | 
						|
								                    if self.cab_location == records.cab_location and self.cab_location_from == records.cab_location_from:
							 | 
						|
								                        total_seat_booked = total_seat_booked+records.seat_booked
							 | 
						|
								                        flag += 1
							 | 
						|
								            if flag > 0:
							 | 
						|
								                test_val = self.seat_capacity - total_seat_booked
							 | 
						|
								                self.seat_available = test_val
							 | 
						|
								
							 | 
						|
								            else:
							 | 
						|
								                self.seat_available = self.seat_capacity
							 | 
						|
								
							 | 
						|
								    @api.multi
							 | 
						|
								    def action_sent(self):
							 | 
						|
								        self.ensure_one()
							 | 
						|
								        ir_model_data = self.env['ir.model.data']
							 | 
						|
								        try:
							 | 
						|
								            template_id = ir_model_data.get_object_reference('cab_booking_management', 'email_template_edi_cab')[1]
							 | 
						|
								        except ValueError:
							 | 
						|
								            template_id = False
							 | 
						|
								        try:
							 | 
						|
								            compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1]
							 | 
						|
								        except ValueError:
							 | 
						|
								            compose_form_id = False
							 | 
						|
								        ctx = dict()
							 | 
						|
								        ctx.update({
							 | 
						|
								            'default_model': 'cab.log',
							 | 
						|
								            'default_res_id': self.ids[0],
							 | 
						|
								            'default_use_template': bool(template_id),
							 | 
						|
								            'default_template_id': template_id,
							 | 
						|
								            'default_composition_mode': 'comment',
							 | 
						|
								        })
							 | 
						|
								        return {
							 | 
						|
								            'type': 'ir.actions.act_window',
							 | 
						|
								            'view_type': 'form',
							 | 
						|
								            'view_mode': 'form',
							 | 
						|
								            'res_model': 'mail.compose.message',
							 | 
						|
								            'views': [(compose_form_id, 'form')],
							 | 
						|
								            'view_id': compose_form_id,
							 | 
						|
								            'target': 'new',
							 | 
						|
								            'context': ctx,
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class MailComposeMessage(models.TransientModel):
							 | 
						|
								    _inherit = 'mail.compose.message'
							 | 
						|
								
							 | 
						|
								    @api.multi
							 | 
						|
								    def send_mail(self, auto_commit=False):
							 | 
						|
								        if self._context.get('default_model') == 'cab.log' and self._context.get('default_res_id'):
							 | 
						|
								            order = self.env['cab.log'].browse([self._context['default_res_id']])
							 | 
						|
								            if order.state == 'approved':
							 | 
						|
								                order.state = 'done'
							 | 
						|
								            order.sent = True
							 | 
						|
								            self = self.with_context(mail_post_autofollow=True)
							 | 
						|
								        return super(MailComposeMessage, self).send_mail(auto_commit=auto_commit)
							 | 
						|
								
							 |