diff --git a/laundry_management/README.rst b/laundry_management/README.rst new file mode 100755 index 000000000..4162f4584 --- /dev/null +++ b/laundry_management/README.rst @@ -0,0 +1,38 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Laundry Management +=================== +Laundry Management + + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +------- +Developer: Sadique Kottekkat @cybrosys, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ \ No newline at end of file diff --git a/laundry_management/__init__.py b/laundry_management/__init__.py new file mode 100755 index 000000000..ef5aa128e --- /dev/null +++ b/laundry_management/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import models +from . import reports diff --git a/laundry_management/__manifest__.py b/laundry_management/__manifest__.py new file mode 100755 index 000000000..6cf6bf4cd --- /dev/null +++ b/laundry_management/__manifest__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + 'name': 'Laundry Management', + 'version': '17.0.1.0.0', + "category": "Industries", + 'summary': """Complete Laundry Service Management""", + 'description': 'This module is very useful to manage all process of laundry' + ' service', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['base', 'mail', 'sale', 'account', 'uom'], + 'data': [ + 'data/laundry_management_data.xml', + 'security/laundry_management_security.xml', + 'security/ir.model.access.csv', + 'views/laundry_order_views.xml', + 'views/washing_views.xml', + 'views/config_views.xml', + 'views/laundry_report_views.xml', + 'views/laundry_label_views.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/laundry_management/data/laundry_management_data.xml b/laundry_management/data/laundry_management_data.xml new file mode 100755 index 000000000..457e4f5b7 --- /dev/null +++ b/laundry_management/data/laundry_management_data.xml @@ -0,0 +1,8 @@ + + + + Laundry Service + service + order + + \ No newline at end of file diff --git a/laundry_management/doc/RELEASE_NOTES.md b/laundry_management/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..74f20c134 --- /dev/null +++ b/laundry_management/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 12.02.2024 +#### Version 17.0.1.0.0 +#### ADD +Initial commit for Laundry Management diff --git a/laundry_management/models/__init__.py b/laundry_management/models/__init__.py new file mode 100755 index 000000000..cd67fb951 --- /dev/null +++ b/laundry_management/models/__init__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import laundry_order +from . import washing_work +from . import washing_washing +from . import washing_type +from . import sale_advance_payment diff --git a/laundry_management/models/laundry_order.py b/laundry_management/models/laundry_order.py new file mode 100755 index 000000000..e6d0a3646 --- /dev/null +++ b/laundry_management/models/laundry_order.py @@ -0,0 +1,279 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields, api, _ +from datetime import datetime + + +class LaundryManagement(models.Model): + """laundry orders generating model""" + _name = 'laundry.order' + _inherit = 'mail.thread' + _description = "Laundry Order" + _order = 'order_date desc, id desc' + + @api.model + def create(self, vals): + """ + Creating the record of laundry order. + """ + vals['name'] = self.env['ir.sequence'].next_by_code('laundry.order') + return super(LaundryManagement, self).create(vals) + + @api.depends('order_lines') + def get_total(self): + """ + Computing the total of total_amount in orderlines. + """ + total = 0 + for obj in self: + for each in obj.order_lines: + total += each.amount + obj.total_amount = total + + def confirm_order(self): + """ + Confirming the order and after confirming order,it will create the + washing.washing model. + """ + self.state = 'order' + sale_obj = self.env['sale.order'].create( + {'partner_id': self.partner_id.id, + 'partner_invoice_id': self.partner_invoice_id.id, + 'partner_shipping_id': self.partner_shipping_id.id}) + self.sale_obj = sale_obj + product_id = self.env.ref('laundry_management.laundry_service') + self.env['sale.order.line'].create({'product_id': product_id.id, + 'name': 'Laundry Service', + 'price_unit': self.total_amount, + 'order_id': sale_obj.id + }) + for each in self: + for obj in each.order_lines: + self.env['washing.washing'].create( + {'name': obj.product_id.name + '-Washing', + 'user_id': obj.washing_type.assigned_person.id, + 'description': obj.description, + 'laundry_obj': obj.id, + 'state': 'draft', + 'washing_date': datetime.now().strftime( + '%Y-%m-%d %H:%M:%S')}) + + def create_invoice(self): + """ + Creating an new invoice for the laundry orders. + """ + if self.sale_obj.state in ['draft', 'sent']: + self.sale_obj.action_confirm() + self.invoice_status = self.sale_obj.invoice_status + return { + 'name': 'Create Invoice', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'sale.advance.payment.inv', + 'type': 'ir.actions.act_window', + 'context': {'laundry_sale_obj': self.sale_obj.id}, + 'target': 'new' + } + + def return_dress(self): + self.state = 'return' + + def cancel_order(self): + self.state = 'cancel' + + def _invoice_count(self): + wrk_ordr_ids = self.env['account.move'].search( + [('invoice_origin', '=', self.sale_obj.name)]) + self.invoice_count = len(wrk_ordr_ids) + + def _work_count(self): + if self.id: + wrk_ordr_ids = self.env['washing.washing'].search( + [('laundry_obj.laundry_obj.id', '=', self.id)]) + self.work_count = len(wrk_ordr_ids) + else: + self.work_count = False + + def action_view_laundry_works(self): + """ + Function for viewing the laundry works. + """ + work_obj = self.env['washing.washing'].search( + [('laundry_obj.laundry_obj.id', '=', self.id)]) + work_ids = [] + for each in work_obj: + work_ids.append(each.id) + view_id = self.env.ref('laundry_management.washing_form_view').id + if work_ids: + if len(work_ids) <= 1: + value = { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'washing.washing', + 'view_id': view_id, + 'type': 'ir.actions.act_window', + 'name': _('Works'), + 'res_id': work_ids and work_ids[0] + } + else: + value = { + 'domain': str([('id', 'in', work_ids)]), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'washing.washing', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'name': _('Works'), + # 'res_id': work_ids + } + return value + + def action_view_invoice(self): + """ + Function for viewing the invoices of laundry orders. + """ + self.ensure_one() + inv_obj = self.env['account.move'].search( + [('invoice_origin', '=', self.sale_obj.name)]) + inv_ids = [] + for each in inv_obj: + inv_ids.append(each.id) + view_id = self.env.ref('account.view_move_form').id + if inv_ids: + if len(inv_ids) <= 1: + value = { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'account.move', + 'view_id': view_id, + 'type': 'ir.actions.act_window', + 'name': _('Invoice'), + 'res_id': inv_ids and inv_ids[0] + } + else: + value = { + 'domain': str([('id', 'in', inv_ids)]), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'account.move', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'name': _('Invoice'), + # 'res_id': inv_ids + } + return value + + name = fields.Char(string="Label", copy=False) + invoice_status = fields.Selection([ + ('upselling', 'Upselling Opportunity'), + ('invoiced', 'Fully Invoiced'), + ('to invoice', 'To Invoice'), + ('no', 'Nothing to Invoice') + ], string='Invoice Status', invisible=1, related='sale_obj.invoice_status', + store=True, help="status of invoice") + sale_obj = fields.Many2one('sale.order', invisible=1, + help="sequence name of sale order") + invoice_count = fields.Integer(compute='_invoice_count', + string='# Invoice', + help="number of invoice count") + work_count = fields.Integer(compute='_work_count', string='# Works', + help="number of work count") + partner_id = fields.Many2one('res.partner', string='Customer', + readonly=True, + states={'draft': [('readonly', False)], + 'order': [('readonly', False)]}, + required=True, + change_default=True, index=True, + help="name of customer" + ) + partner_invoice_id = fields.Many2one('res.partner', + string='Invoice Address', + readonly=True, required=True, + states={ + 'draft': [('readonly', False)], + 'order': [('readonly', False)]}, + help="Invoice address for current" + " sales order.") + partner_shipping_id = fields.Many2one('res.partner', + string='Delivery Address', + readonly=True, required=True, + states={ + 'draft': [('readonly', False)], + 'order': [('readonly', False)]}, + help="Delivery address for current" + " sales order.") + order_date = fields.Datetime(string='Date', readonly=True, index=True, + states={'draft': [('readonly', False)], + 'order': [('readonly', False)]}, + copy=False, default=fields.Datetime.now, + help="date of order") + laundry_person = fields.Many2one('res.users', string='Laundry Person', + required=1, help="name of laundry person") + order_lines = fields.One2many('laundry.order.line', 'laundry_obj', + required=1, ondelete='cascade', + help="orderlines of laundry orders") + total_amount = fields.Float(compute='get_total', string='Total', store=1, + help="total amount") + currency_id = fields.Many2one("res.currency", string="Currency", + help="name of currency") + note = fields.Text(string='Terms and conditions') + state = fields.Selection([ + ('draft', 'Draft'), + ('order', 'Laundry Order'), + ('process', 'Processing'), + ('done', 'Done'), + ('return', 'Returned'), + ('cancel', 'Cancelled'), + ], string='Status', readonly=True, copy=False, index=True, + track_visibility='onchange', default='draft', help="state of the order") + + +class LaundryManagementLine(models.Model): + """laundry orderlines generating model""" + _name = 'laundry.order.line' + _description = "Laundry Order Line" + + @api.depends('washing_type', 'extra_work', 'qty') + def get_amount(self): + for obj in self: + total = obj.washing_type.amount * obj.qty + for each in obj.extra_work: + total += each.amount * obj.qty + obj.amount = total + + product_id = fields.Many2one('product.product', string='Dress', + required=1, help="name of the product") + qty = fields.Integer(string='No of items', required=1, + help="number of quantity") + description = fields.Text(string='Description') + washing_type = fields.Many2one('washing.type', string='Washing Type', + required=1) + extra_work = fields.Many2many('washing.work', string='Extra Work') + amount = fields.Float(compute='get_amount', string='Amount') + laundry_obj = fields.Many2one('laundry.order', invisible=1) + state = fields.Selection([ + ('draft', 'Draft'), + ('wash', 'Washing'), + ('extra_work', 'Make Over'), + ('done', 'Done'), + ('cancel', 'Cancelled'), + ], string='Status', readonly=True, copy=False, index=True, default='draft') diff --git a/laundry_management/models/sale_advance_payment.py b/laundry_management/models/sale_advance_payment.py new file mode 100644 index 000000000..72671157a --- /dev/null +++ b/laundry_management/models/sale_advance_payment.py @@ -0,0 +1,125 @@ +from odoo import models, _ +import time +from odoo.exceptions import UserError + + +class LaundryManagementInvoice(models.TransientModel): + """inheriting the model of sale.advance.payment.inv to generate advance + payment of invoice""" + _inherit = 'sale.advance.payment.inv' + + def create_invoices(self): + """ + Function for creating invoices for the advance payment. + """ + context = self._context + if context.get('laundry_sale_obj'): + sale_orders = self.env['sale.order'].browse( + context.get('laundry_sale_obj')) + + else: + sale_orders = self.env['sale.order'].browse( + self._context.get('active_ids', [])) + if self.advance_payment_method == 'delivered': + sale_orders._create_invoices() + elif self.advance_payment_method == 'all': + sale_orders._create_invoices()(final=True) + else: + # Create deposit product if necessary + if not self.product_id: + vals = self._prepare_deposit_product() + self.product_id = self.env['product.product'].create(vals) + + self.env['ir.config_parameter'].sudo().set_param( + 'sale.default_deposit_product_id', self.product_id.id) + sale_line_obj = self.env['sale.order.line'] + for order in sale_orders: + if self.advance_payment_method == 'percentage': + amount = order.amount_untaxed * self.amount / 100 + else: + amount = self.amount + if self.product_id.invoice_policy != 'order': + raise UserError(_( + 'The product used to invoice a down payment should have' + ' an invoice policy set to "Ordered' + ' quantities". Please update your deposit product to be' + ' able to create a deposit invoice.')) + if self.product_id.type != 'service': + raise UserError(_( + "The product used to invoice a down payment should be" + " of type 'Service'. Please use another " + "product or update this product.")) + taxes = self.product_id.taxes_id.filtered( + lambda + r: not order.company_id or r.company_id == + order.company_id) + if order.fiscal_position_id and taxes: + tax_ids = order.fiscal_position_id.map_tax(taxes).ids + else: + tax_ids = taxes.ids + so_line = sale_line_obj.create({ + 'name': _('Advance: %s') % (time.strftime('%m %Y'),), + 'price_unit': amount, + 'product_uom_qty': 0.0, + 'order_id': order.id, + 'discount': 0.0, + 'product_uom': self.product_id.uom_id.id, + 'product_id': self.product_id.id, + 'tax_id': [(6, 0, tax_ids)], + }) + self._create_invoice(order, so_line, amount) + if self._context.get('open_invoices', False): + return sale_orders.action_view_invoice() + return {'type': 'ir.actions.act_window_close'} + + def _create_invoice(self, order, so_line): + if ( + self.advance_payment_method == 'percentage' and + self.amount <= 0.00) or ( + self.advance_payment_method == 'fixed' and + self.fixed_amount <= 0.00): + raise UserError( + _('The value of the down payment amount must be positive.')) + if self.advance_payment_method == 'percentage': + amount = order.amount_untaxed * self.amount / 100 + name = _("Down payment of %s%%") % (self.amount,) + else: + amount = self.fixed_amount + name = _('Down Payment') + + invoice_vals = { + 'move_type': 'out_invoice', + 'invoice_origin': order.name, + 'invoice_user_id': order.user_id.id, + 'narration': order.note, + 'partner_id': order.partner_invoice_id.id, + 'fiscal_position_id': order.fiscal_position_id.id or order. + partner_id.property_account_position_id.id, + 'partner_shipping_id': order.partner_shipping_id.id, + 'currency_id': order.pricelist_id.currency_id.id, + 'ref': order.client_order_ref, + 'invoice_payment_term_id': order.payment_term_id.id, + 'team_id': order.team_id.id, + 'campaign_id': order.campaign_id.id, + 'medium_id': order.medium_id.id, + 'source_id': order.source_id.id, + 'invoice_line_ids': [(0, 0, { + 'name': name, + 'price_unit': amount, + 'quantity': 1.0, + 'product_id': self.product_id.id, + 'product_uom_id': so_line.product_uom.id, + + 'sale_line_ids': [(6, 0, [so_line.id])], + 'analytic_tag_ids': [(6, 0, so_line.analytic_tag_ids.ids)], + 'analytic_account_id': order.analytic_account_id.id or False, + })], + } + if order.fiscal_position_id: + invoice_vals['fiscal_position_id'] = order.fiscal_position_id.id + invoice = self.env['account.move'].create(invoice_vals) + invoice.message_post_with_view('mail.message_origin_link', + values={'self': invoice, + 'origin': order}, + subtype_id=self.env.ref( + 'mail.mt_note').id) diff --git a/laundry_management/models/washing_type.py b/laundry_management/models/washing_type.py new file mode 100644 index 000000000..ba282c843 --- /dev/null +++ b/laundry_management/models/washing_type.py @@ -0,0 +1,13 @@ +from odoo import models, fields + + +class WashingType(models.Model): + """washing types generating model""" + _name = 'washing.type' + _description = "Washing TYpe" + + name = fields.Char(string='Name', required=1) + assigned_person = fields.Many2one('res.users', + string='Assigned Person', required=1, + help="name of assigned person") + amount = fields.Float(string='Service Charge', required=1) diff --git a/laundry_management/models/washing_washing.py b/laundry_management/models/washing_washing.py new file mode 100644 index 000000000..63e2a2f7c --- /dev/null +++ b/laundry_management/models/washing_washing.py @@ -0,0 +1,112 @@ +from odoo import models, fields, api +from datetime import datetime + + +class Washing(models.Model): + """washing activity generating model""" + _name = 'washing.washing' + _description = 'Washing Washing' + + def start_wash(self): + """ + Function for initiating the activity of washing. + """ + if not self.laundry_works: + self.laundry_obj.state = 'wash' + self.laundry_obj.laundry_obj.state = 'process' + for each in self: + for obj in each.product_line: + self.env['sale.order.line'].create( + {'product_id': obj.product_id.id, + 'name': obj.name, + 'price_unit': obj.price_unit, + 'order_id': each.laundry_obj.laundry_obj.sale_obj.id, + 'product_uom_qty': obj.quantity, + 'product_uom': obj.uom_id.id, + }) + self.state = 'process' + + def set_to_done(self): + self.state = 'done' + + f = 0 + if not self.laundry_works: + if self.laundry_obj.extra_work: + for each in self.laundry_obj.extra_work: + self.create({'name': each.name, + 'user_id': each.assigned_person.id, + 'description': self.laundry_obj.description, + 'laundry_obj': self.laundry_obj.id, + 'state': 'draft', + 'laundry_works': True, + 'washing_date': datetime.now().strftime( + '%Y-%m-%d %H:%M:%S')}) + self.laundry_obj.state = 'extra_work' + laundry_obj = self.search([('laundry_obj.laundry_obj', '=', + self.laundry_obj.laundry_obj.id)]) + for each in laundry_obj: + if each.state != 'done' or each.state == 'cancel': + f = 1 + break + if f == 0: + self.laundry_obj.laundry_obj.state = 'done' + laundry_obj1 = self.search([('laundry_obj', '=', self.laundry_obj.id)]) + f1 = 0 + for each in laundry_obj1: + if each.state != 'done' or each.state == 'cancel': + f1 = 1 + break + if f1 == 0: + self.laundry_obj.state = 'done' + + @api.depends('product_line') + def get_total(self): + total = 0 + for obj in self: + for each in obj.product_line: + total += each.subtotal + obj.total_amount = total + + name = fields.Char(string='Work') + laundry_works = fields.Boolean(default=False, invisible=1) + user_id = fields.Many2one('res.users', + string='Assigned Person', + help="name of assigned person") + washing_date = fields.Datetime(string='Date', help="date of washing") + description = fields.Text(string='Description') + state = fields.Selection([ + ('draft', 'Draft'), + ('process', 'Process'), + ('done', 'Done'), + ('cancel', 'Cancelled'), + ], string='Status', readonly=True, copy=False, index=True, default='draft') + laundry_obj = fields.Many2one('laundry.order.line', invisible=1) + product_line = fields.One2many('wash.order.line', 'wash_obj', + string='Products', ondelete='cascade') + total_amount = fields.Float(compute='get_total', string='Grand Total') + + +class SaleOrderInherit(models.Model): + """ + for creating orderlines in washing. + """ + _name = 'wash.order.line' + _description = 'Washing Order LINE' + + @api.depends('price_unit', 'quantity') + def compute_amount(self): + total = 0 + for obj in self: + total += obj.price_unit * obj.quantity + obj.subtotal = total + + wash_obj = fields.Many2one('washing.washing', string='Order Reference', + ondelete='cascade') + name = fields.Text(string='Description', required=True) + uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True) + quantity = fields.Integer(string='Quantity') + product_id = fields.Many2one('product.product', string='Product') + price_unit = fields.Float('Unit Price', default=0.0, + related='product_id.list_price') + subtotal = fields.Float(compute='compute_amount', string='Subtotal', + readonly=True, store=True) diff --git a/laundry_management/models/washing_work.py b/laundry_management/models/washing_work.py new file mode 100644 index 000000000..cb21039c0 --- /dev/null +++ b/laundry_management/models/washing_work.py @@ -0,0 +1,15 @@ +from odoo import models, fields + + +class ExtraWork(models.Model): + """ + model for creating extra work for washing. + """ + _name = 'washing.work' + _description = 'Washing Work' + + name = fields.Char(string='Name', required=1) + assigned_person = fields.Many2one('res.users', + string='Assigned Person', required=1, + help="name of assigned person") + amount = fields.Float(string='Service Charge', required=1) diff --git a/laundry_management/reports/__init__.py b/laundry_management/reports/__init__.py new file mode 100755 index 000000000..544eb75e4 --- /dev/null +++ b/laundry_management/reports/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import laundry_report diff --git a/laundry_management/reports/laundry_report.py b/laundry_management/reports/laundry_report.py new file mode 100755 index 000000000..cbd1a546b --- /dev/null +++ b/laundry_management/reports/laundry_report.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Sadique Kottekkat(odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from odoo import models, fields, tools + + +class DifferedCheckHistory(models.Model): + """ + model for checking the history of all laundry orders. + """ + _name = "report.laundry.order" + _description = "Laundry Order Analysis" + _auto = False + + name = fields.Char(string="Label") + invoice_status = fields.Selection([ + ('upselling', 'Upselling Opportunity'), + ('invoiced', 'Fully Invoiced'), + ('to invoice', 'To Invoice'), + ('no', 'Nothing to Invoice') + ], string='Invoice Status', store=True, help="status of invoice") + partner_id = fields.Many2one('res.partner', string='Customer', + help="name of the customer") + partner_invoice_id = fields.Many2one('res.partner', + string='Invoice Address', + help="invoice address of customer") + partner_shipping_id = fields.Many2one('res.partner', + string='Delivery Address', + help="delivery address of customer") + order_date = fields.Datetime(string="Date", help="date of order") + laundry_person = fields.Many2one('res.users', + string='Laundry Person', + help="name of laundry person") + total_amount = fields.Float(string='Total') + currency_id = fields.Many2one("res.currency", + string="Currency", help="name of currency") + state = fields.Selection([ + ('draft', 'Draft'), + ('order', 'Laundry Order'), + ('process', 'Processing'), + ('done', 'Done'), + ('return', 'Returned'), + ('cancel', 'Cancelled'), + ], string='Status') + + _order = 'name desc' + + def _select(self): + select_str = """ + SELECT + (select 1 ) AS nbr, + t.id as id, + t.name as name, + t.invoice_status as invoice_status, + t.partner_id as partner_id, + t.partner_invoice_id as partner_invoice_id, + t.partner_shipping_id as partner_shipping_id, + t.order_date as order_date, + t.laundry_person as laundry_person, + t.total_amount as total_amount, + t.currency_id as currency_id, + t.state as state + """ + return select_str + + def _group_by(self): + group_by_str = """ + GROUP BY + t.id, + name, + invoice_status, + partner_id, + partner_invoice_id, + partner_shipping_id, + order_date, + laundry_person, + total_amount, + currency_id, + state + """ + return group_by_str + + def init(self): + tools.sql.drop_view_if_exists(self._cr, 'report_laundry_order') + self._cr.execute(""" + CREATE view report_laundry_order as + %s + FROM laundry_order t + %s + """ % (self._select(), self._group_by())) diff --git a/laundry_management/security/ir.model.access.csv b/laundry_management/security/ir.model.access.csv new file mode 100755 index 000000000..d55037a12 --- /dev/null +++ b/laundry_management/security/ir.model.access.csv @@ -0,0 +1,19 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_laundry_order_user,access.laundry.order.user,model_laundry_order,laundry_group_user,1,1,0,0 +access_laundry_order_manager,access.laundry.order.manager,model_laundry_order,laundry_group_manager,1,1,1,1 +access_laundry_order_line_user,access.laundry.order.line.user,model_laundry_order_line,laundry_group_user,1,1,0,0 +access_laundry_order_line_manager,access.laundry.order.line.manager,model_laundry_order_line,laundry_group_manager,1,1,1,1 +access_washing_type_user,access.washing.type.user,model_washing_type,laundry_group_user,1,0,0,0 +access_washing_type_manager,access.washing.type.manager,model_washing_type,laundry_group_manager,1,1,1,1 +access_washing_work_user,access.washing.work.user,model_washing_work,laundry_group_user,1,0,0,0 +access_washing_work_manager,access.washing.work.manager,model_washing_work,laundry_group_manager,1,1,1,1 +access_washing_washing_user,access.washing.washing.user,model_washing_washing,laundry_group_user,1,1,1,0 +access_washing_washing_manager,access.washing.washing.manager,model_washing_washing,laundry_group_manager,1,1,1,1 +access_wash_order_line_user,access.wash.order.line.user,model_wash_order_line,laundry_group_user,1,1,1,0 +access_wash_order_line_manager,access.wash.order.line.manager,model_wash_order_line,laundry_group_manager,1,1,1,1 +access_report_laundry_order_user,access.report.laundry.order.user,model_report_laundry_order,laundry_group_user,1,0,0,0 +access_report_laundry_order_manager,access.report.laundry.order.manager,model_report_laundry_order,laundry_group_manager,1,1,1,1 +access_report_laundry_order_manager1,access.report.laundry.order.manager1,sale.model_sale_order,laundry_group_manager,1,1,1,1 +access_report_laundry_order_manager12,access.report.laundry.order.manager12,sale.model_sale_order_line,laundry_group_manager,1,1,1,1 +access_report_laundry_order_manager11,access.report.laundry.order.manager11,sale.model_sale_order,laundry_group_user,1,1,1,1 +access_report_laundry_order_manager112,access.report.laundry.order.manager112,sale.model_sale_order_line,laundry_group_user,1,1,1,1 \ No newline at end of file diff --git a/laundry_management/security/laundry_management_security.xml b/laundry_management/security/laundry_management_security.xml new file mode 100755 index 000000000..a4ad48094 --- /dev/null +++ b/laundry_management/security/laundry_management_security.xml @@ -0,0 +1,34 @@ + + + + + Laundry + 18 + + + User + + + + + Manager + + + + + + laundry manager: full access + + [(1,'=',1)] + + + + user: own document only + + [('laundry_person.id','=',user.id)] + + + + + diff --git a/laundry_management/static/description/assets/icons/capture (1).png b/laundry_management/static/description/assets/icons/capture (1).png new file mode 100644 index 000000000..8824deafc Binary files /dev/null and b/laundry_management/static/description/assets/icons/capture (1).png differ diff --git a/laundry_management/static/description/assets/icons/check.png b/laundry_management/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/laundry_management/static/description/assets/icons/check.png differ diff --git a/laundry_management/static/description/assets/icons/chevron.png b/laundry_management/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/laundry_management/static/description/assets/icons/chevron.png differ diff --git a/laundry_management/static/description/assets/icons/cogs.png b/laundry_management/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/laundry_management/static/description/assets/icons/cogs.png differ diff --git a/laundry_management/static/description/assets/icons/consultation.png b/laundry_management/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/laundry_management/static/description/assets/icons/consultation.png differ diff --git a/laundry_management/static/description/assets/icons/ecom-black.png b/laundry_management/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/laundry_management/static/description/assets/icons/ecom-black.png differ diff --git a/laundry_management/static/description/assets/icons/education-black.png b/laundry_management/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/laundry_management/static/description/assets/icons/education-black.png differ diff --git a/laundry_management/static/description/assets/icons/hotel-black.png b/laundry_management/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/laundry_management/static/description/assets/icons/hotel-black.png differ diff --git a/laundry_management/static/description/assets/icons/img.png b/laundry_management/static/description/assets/icons/img.png new file mode 100644 index 000000000..70197f477 Binary files /dev/null and b/laundry_management/static/description/assets/icons/img.png differ diff --git a/laundry_management/static/description/assets/icons/license.png b/laundry_management/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/laundry_management/static/description/assets/icons/license.png differ diff --git a/laundry_management/static/description/assets/icons/lifebuoy.png b/laundry_management/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/laundry_management/static/description/assets/icons/lifebuoy.png differ diff --git a/laundry_management/static/description/assets/icons/manufacturing-black.png b/laundry_management/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/laundry_management/static/description/assets/icons/manufacturing-black.png differ diff --git a/laundry_management/static/description/assets/icons/photo-capture.png b/laundry_management/static/description/assets/icons/photo-capture.png new file mode 100644 index 000000000..06c111758 Binary files /dev/null and b/laundry_management/static/description/assets/icons/photo-capture.png differ diff --git a/laundry_management/static/description/assets/icons/pos-black.png b/laundry_management/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/laundry_management/static/description/assets/icons/pos-black.png differ diff --git a/laundry_management/static/description/assets/icons/puzzle.png b/laundry_management/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/laundry_management/static/description/assets/icons/puzzle.png differ diff --git a/laundry_management/static/description/assets/icons/restaurant-black.png b/laundry_management/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/laundry_management/static/description/assets/icons/restaurant-black.png differ diff --git a/laundry_management/static/description/assets/icons/service-black.png b/laundry_management/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/laundry_management/static/description/assets/icons/service-black.png differ diff --git a/laundry_management/static/description/assets/icons/trading-black.png b/laundry_management/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/laundry_management/static/description/assets/icons/trading-black.png differ diff --git a/laundry_management/static/description/assets/icons/training.png b/laundry_management/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/laundry_management/static/description/assets/icons/training.png differ diff --git a/laundry_management/static/description/assets/icons/update.png b/laundry_management/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/laundry_management/static/description/assets/icons/update.png differ diff --git a/laundry_management/static/description/assets/icons/user.png b/laundry_management/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/laundry_management/static/description/assets/icons/user.png differ diff --git a/laundry_management/static/description/assets/icons/wrench.png b/laundry_management/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/laundry_management/static/description/assets/icons/wrench.png differ diff --git a/laundry_management/static/description/assets/misc/Cybrosys R.png b/laundry_management/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/laundry_management/static/description/assets/misc/Cybrosys R.png differ diff --git a/laundry_management/static/description/assets/misc/email.svg b/laundry_management/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/laundry_management/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/misc/phone.svg b/laundry_management/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/laundry_management/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/laundry_management/static/description/assets/misc/star (1) 2.svg b/laundry_management/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/laundry_management/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/misc/support (1) 1.svg b/laundry_management/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/laundry_management/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/misc/support-email.svg b/laundry_management/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/laundry_management/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/laundry_management/static/description/assets/misc/tick-mark.svg b/laundry_management/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/laundry_management/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/misc/whatsapp 1.svg b/laundry_management/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/laundry_management/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/misc/whatsapp.svg b/laundry_management/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/laundry_management/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/modules/1.png b/laundry_management/static/description/assets/modules/1.png new file mode 100644 index 000000000..29a17f2be Binary files /dev/null and b/laundry_management/static/description/assets/modules/1.png differ diff --git a/laundry_management/static/description/assets/modules/2.png b/laundry_management/static/description/assets/modules/2.png new file mode 100644 index 000000000..be454ea44 Binary files /dev/null and b/laundry_management/static/description/assets/modules/2.png differ diff --git a/laundry_management/static/description/assets/modules/3.png b/laundry_management/static/description/assets/modules/3.png new file mode 100644 index 000000000..7c0ec1679 Binary files /dev/null and b/laundry_management/static/description/assets/modules/3.png differ diff --git a/laundry_management/static/description/assets/modules/4.png b/laundry_management/static/description/assets/modules/4.png new file mode 100644 index 000000000..6350a5b2e Binary files /dev/null and b/laundry_management/static/description/assets/modules/4.png differ diff --git a/laundry_management/static/description/assets/modules/5.png b/laundry_management/static/description/assets/modules/5.png new file mode 100644 index 000000000..c9d686d47 Binary files /dev/null and b/laundry_management/static/description/assets/modules/5.png differ diff --git a/laundry_management/static/description/assets/modules/6.png b/laundry_management/static/description/assets/modules/6.png new file mode 100644 index 000000000..b03792fc3 Binary files /dev/null and b/laundry_management/static/description/assets/modules/6.png differ diff --git a/laundry_management/static/description/assets/screenshots/1.png b/laundry_management/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..4eed76783 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/1.png differ diff --git a/laundry_management/static/description/assets/screenshots/10.png b/laundry_management/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..80721310e Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/10.png differ diff --git a/laundry_management/static/description/assets/screenshots/2.png b/laundry_management/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..6c94fc525 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/2.png differ diff --git a/laundry_management/static/description/assets/screenshots/3.png b/laundry_management/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..2da3ab4de Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/3.png differ diff --git a/laundry_management/static/description/assets/screenshots/4.png b/laundry_management/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..0a3facdac Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/4.png differ diff --git a/laundry_management/static/description/assets/screenshots/5.png b/laundry_management/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..0c3d12e15 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/5.png differ diff --git a/laundry_management/static/description/assets/screenshots/6.png b/laundry_management/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..3db45e9d7 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/6.png differ diff --git a/laundry_management/static/description/assets/screenshots/7.png b/laundry_management/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..148b3eab5 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/7.png differ diff --git a/laundry_management/static/description/assets/screenshots/8.png b/laundry_management/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..52f3b8d18 Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/8.png differ diff --git a/laundry_management/static/description/assets/screenshots/9.png b/laundry_management/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..0de02655e Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/9.png differ diff --git a/laundry_management/static/description/assets/screenshots/hero.gif b/laundry_management/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..8a569d99d Binary files /dev/null and b/laundry_management/static/description/assets/screenshots/hero.gif differ diff --git a/laundry_management/static/description/banner.jpg b/laundry_management/static/description/banner.jpg new file mode 100644 index 000000000..4fb3045b8 Binary files /dev/null and b/laundry_management/static/description/banner.jpg differ diff --git a/laundry_management/static/description/icon.png b/laundry_management/static/description/icon.png new file mode 100644 index 000000000..50e2f2be6 Binary files /dev/null and b/laundry_management/static/description/icon.png differ diff --git a/laundry_management/static/description/index.html b/laundry_management/static/description/index.html new file mode 100644 index 000000000..f1f2df215 --- /dev/null +++ b/laundry_management/static/description/index.html @@ -0,0 +1,945 @@ + + + + + + + Odoo App 3 Index + + + + + + + + +
+
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+
+
+
+

+ Laundry Management

+

+ Helps You To Manage Laundry Service. +

+
+ +
+
+
+
+
+

+ Key Highlights +

+
+
+
+
+
+ +
+
+

+ Manages Laundry Process

+

This is an + industrial specific module by Cybrosys + Technologies for Laundry Management. It manages + the laundry process with assigning works to + workers. +

+
+
+
+
+
+
+ +
+
+

+ Laundry Order Analysis Report

+

Can create + laundry order analysis report. +

+
+
+
+
+
+
+ +
+
+

+ Using Washing Type and Additional Works.

+

Laundry order + can be created by using different types of + washing and an additional works can be included + in the laundry order. +

+
+
+
+
+ +
+
+
+
+
+ +
+
+

+ Recording Laundry Order +

+

+ Laundry Management -> Laundry + Management -> Laundry Order + When you install this module, an + extra menu Laundry Management + will created in main menu. Youcan + see the different sub menus under + the main menu. Here you can create + Laundry Order via clicking the + 'Create' button. There you can + specify the customer, laundry + person, + order lines with washing type and + Extra works for your orders. +

+
+
+
+
+
+
+ +
+
+

+ When you confirm the Laundry Order + the corresponding works will created + under the assigned person. + There you can add extra products + also. It will also add in Billing. +

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+

+ Laundry Label +

+
+
+

+ You can print label for each order + from the print menu. +

+
+
+
+
+
+
+ +
+
+

+ Laundry Works +

+
+
+

+ Laundry Management -> Laundry + Management -> Laundry Works + This is the Separate Laundry Works + Form. Here you can see the work + status of Laundry Works +

+
+
+
+
+
+
+ +
+
+

+ If there is any extra works , it + will created as work When you finish + the main work. Then we + can see the status of that order + line is become 'Make Over' +

+
+
+
+
+
+
+ +
+
+

+ Invoice +

+
+
+

+ You can create Invoice via the + button 'Create Invoice' when the + order reaches to 'Done' state. +

+
+
+
+
+
+
+ +
+
+

+ You can see all the Invoice through + the smart button "Invoices" from the + Laundry Order form. +

+
+
+
+ +
+
+
+ +
+
+

+ Configuration +

+
+
+

+ You can configure washing types from + the menu Laundry Management -> + Configuration -> + Washing Type by specifying the name, + assigned person and service charge. +

+
+
+
+
+
+
+ +
+
+

+ You can configure additional works + from the menu Laundry Management -> + Configuration -> + Additional Works by specifying the + name, assigned person and service + charge +

+
+
+
+
+
+
+
    +
  • + Recording + Laundry Order. +
  • +
  • + Make Invoices. +
  • +
  • + Billing Facility + for Extra Works. +
  • +
  • + Detailed Laundry + Work Analysis Report. +
  • +
  • + Configuration + for Washing Type. +
  • +
  • + Assigning Works. +
  • +
  • + Separate View + for Works. +
  • +
  • + Label Printing + for Every Order. +
  • +
  • + Access Rights + From Multiple Level. +
  • +
  • + Config. for + Extra Works (Ironing/Patching etc.) +
  • +
+
+
+
+
+
+
Version + 17.0.1.0.0|Released on:12th February 2024 +
+

+ + Initial commit for Laundry + Management.

+
+
+
+
+
+
+
+

+ Related Products

+
+
+ +
+
+

+ Our Services

+
+
+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Customization

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Implementation

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Support

+
+
+
+
+
+
+ service-icon +
+
+

+ Hire Odoo Developer

+
+
+
+
+ +
+
+ service-icon +
+
+

+ Odoo Integration

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Migration

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Consultancy

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Implementation

+
+
+
+
+
+
+ service-icon +
+
+

+ Odoo Licensing Consultancy

+
+
+
+
+
+
+

+ Our Industries

+
+
+
+
+
+
+ +

Trading

+

Easily procure and sell your products

+
+
+
+
+ +

POS

+

Easy configuration and convivial + experience

+
+
+
+
+ +

+ Education

+

A platform for educational management

+
+
+
+
+ +

+ Manufacturing

+

Plan, track and schedule your operations

+
+
+
+
+ +

E-commerce & + Website

+

Mobile friendly, awe-inspiring product + pages

+
+
+
+
+ +

Service + Management

+

Keep track of services and invoice

+
+
+
+
+ +

+ Restaurant

+

Run your bar or restaurant methodically

+
+
+
+
+ +

Hotel + Management

+

An all-inclusive hotel management + application

+
+
+
+
+
+
+

+ Support

+
+
+
+
+
+
+
+ +
+ Need + Help? +

+ Got questions or need help? Get in + touch.

+
odoo@cybrosys.com +
+
+
+
+
+
+
+
+ +
+ WhatsApp +

+ Say hi to us on WhatsApp!

+
+91 + 99456767686 +
+
+
+
+
+
+
+
+
+
+
+ + + + + + diff --git a/laundry_management/views/config_views.xml b/laundry_management/views/config_views.xml new file mode 100755 index 000000000..3bbfc588b --- /dev/null +++ b/laundry_management/views/config_views.xml @@ -0,0 +1,97 @@ + + + + + + washing.type.form + washing.type + +
+ + + + + + + + + + + +
+
+
+ + + washing.type.tree + washing.type + + + + + + + + + + Washing Type + ir.actions.act_window + washing.type + tree,form + + + washing.work.form + washing.work + +
+ + + + + + + + + + + +
+
+
+ + + washing.work.tree + washing.work + + + + + + + + + + Additional Works + ir.actions.act_window + washing.work + tree,form + + + + + + +
+
\ No newline at end of file diff --git a/laundry_management/views/laundry_label_views.xml b/laundry_management/views/laundry_label_views.xml new file mode 100755 index 000000000..835044ff9 --- /dev/null +++ b/laundry_management/views/laundry_label_views.xml @@ -0,0 +1,54 @@ + + + + + + + Laundry Order Label + laundry.order + qweb-pdf + laundry_management.laundry_order_label + + laundry_management.laundry_order_label + + + report + + + diff --git a/laundry_management/views/laundry_order_views.xml b/laundry_management/views/laundry_order_views.xml new file mode 100755 index 000000000..8088d3ced --- /dev/null +++ b/laundry_management/views/laundry_order_views.xml @@ -0,0 +1,148 @@ + + + + + Laundry Order Code + laundry.order + + LO + + + + laundry.order.form + laundry.order + +
+
+
+ +
+ + +
+
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+ + + + + + laundry.order.tree + laundry.order + + + + + + + + + + + + + Laundry Management + ir.actions.act_window + laundry.order + tree,form + [] + +

+ Click to create a New Order. +

+
+
+ + + + + \ No newline at end of file diff --git a/laundry_management/views/laundry_report_views.xml b/laundry_management/views/laundry_report_views.xml new file mode 100755 index 000000000..940fb9c51 --- /dev/null +++ b/laundry_management/views/laundry_report_views.xml @@ -0,0 +1,32 @@ + + + + + + report.laundry.order.pivot + report.laundry.order + + + + + + + + Laundry Order Analysis + report.laundry.order + pivot + {'group_by_no_leaf':1,'group_by':[]} + This report allows you to analyse the performance + of your Laundry Management. + + + + + + \ No newline at end of file diff --git a/laundry_management/views/washing_views.xml b/laundry_management/views/washing_views.xml new file mode 100755 index 000000000..5982848bd --- /dev/null +++ b/laundry_management/views/washing_views.xml @@ -0,0 +1,86 @@ + + + + + + washing.washing.form + washing.washing + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + washing.washing.tree + washing.washing + + + + + + + + + + + Washing + ir.actions.act_window + washing.washing + tree,form + [('user_id','=', uid)] + + + + \ No newline at end of file