diff --git a/laundry_management/README.rst b/laundry_management/README.rst new file mode 100755 index 000000000..b2d58aac3 --- /dev/null +++ b/laundry_management/README.rst @@ -0,0 +1,49 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Laundry Management +=================== +Laundry Management + +Configuration +=============== +For every user set the Laundry User group. + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL v3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +Developer: (V18) Ammu Raj, Ayana kp, +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: ``__ diff --git a/laundry_management/__init__.py b/laundry_management/__init__.py new file mode 100755 index 000000000..4d1333854 --- /dev/null +++ b/laundry_management/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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..1e012f760 --- /dev/null +++ b/laundry_management/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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': '18.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', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['sale_management', 'account', ], + 'data': [ + 'data/laundry_management_data.xml', + 'data/ir_sequenca_data.xml', + 'security/laundry_management_security.xml', + 'security/ir.model.access.csv', + 'views/laundry_order_views.xml', + 'views/washing_washing_views.xml', + 'views/washing_type_views.xml', + 'views/report_laundry_order_views.xml', + 'views/washing_work_views.xml', + 'views/label_templates.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': True, +} diff --git a/laundry_management/data/ir_sequenca_data.xml b/laundry_management/data/ir_sequenca_data.xml new file mode 100644 index 000000000..42be7a115 --- /dev/null +++ b/laundry_management/data/ir_sequenca_data.xml @@ -0,0 +1,9 @@ + + + + Laundry Order Code + laundry.order + + LO + + diff --git a/laundry_management/data/laundry_management_data.xml b/laundry_management/data/laundry_management_data.xml new file mode 100755 index 000000000..eb3481975 --- /dev/null +++ b/laundry_management/data/laundry_management_data.xml @@ -0,0 +1,9 @@ + + + + + Laundry Service + service + order + + diff --git a/laundry_management/doc/RELEASE_NOTES.md b/laundry_management/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..40f16db11 --- /dev/null +++ b/laundry_management/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 04.11.2024 +#### Version 18.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..5add50caf --- /dev/null +++ b/laundry_management/models/__init__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 sale_advance_payment +from . import washing_type +from . import washing_washing +from . import washing_work diff --git a/laundry_management/models/laundry_order.py b/laundry_management/models/laundry_order.py new file mode 100755 index 000000000..368652b15 --- /dev/null +++ b/laundry_management/models/laundry_order.py @@ -0,0 +1,264 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 datetime import datetime +from odoo import api, Command, fields, models, _ + + +class LaundryOrder(models.Model): + """laundry orders generating model""" + _name = 'laundry.order' + _inherit = 'mail.thread' + _description = "Laundry Order" + _order = 'order_date desc, id desc' + + name = fields.Char(string="Label", copy=False, help="Name of the record") + sale_id = fields.Many2one('sale.order', + help="sequence name of sale order") + invoice_status = fields.Selection(string='Invoice Status', related='sale_id.invoice_status', + store=True, help="Status of invoice") + invoice_count = fields.Integer(compute='_compute_invoice_count', + string='#Invoice', + help="Number of invoice count") + work_count = fields.Integer(compute='_compute_work_count', string='# Works', + help="Number of work count") + partner_id = fields.Many2one('res.partner', string='Customer', + readonly=True, + 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, + help="Invoice address for current" + "sales order.") + partner_shipping_id = fields.Many2one('res.partner', + string='Delivery Address', + readonly=True, required=True, + help="Delivery address for current" + "sales order.") + order_date = fields.Datetime(string='Date', readonly=True, index=True, + copy=False, default=fields.Datetime.now, + help="Date of order") + laundry_person_id = fields.Many2one('res.users', string='Laundry Person', + required=True, + help="Name of laundry person") + order_line_ids = fields.One2many('laundry.order.line', 'laundry_id', + required=True, ondelete='cascade', + help="Order lines of laundry orders") + total_amount = fields.Float(compute='_compute_total_amount', string='Total', + store=True, + help="To get the Total amount") + currency_id = fields.Many2one("res.currency", string="Currency", + help="Name of currency") + note = fields.Text(string='Terms and conditions', + help='Add 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") + + @api.model_create_multi + def create(self, vals_list): + """Creating the record of Laundry order.""" + for vals in vals_list: + vals['name'] = self.env['ir.sequence'].next_by_code('laundry.order') + return super().create(vals_list) + + @api.depends('order_line_ids') + def _compute_total_amount(self): + """Computing the total of total_amount in order lines.""" + total = 0 + for order in self: + for line in order.order_line_ids: + total += line.amount + order.total_amount = total + + def confirm_order(self): + """Confirming the order and after confirming order,it will create the + washing model""" + self.state = 'order' + product_id = self.env.ref( + 'laundry_management.product_product_laundry_service') + self.sale_id = 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, + 'user_id': self.laundry_person_id.id, + 'order_line': [Command.create({'product_id': product_id.id, + 'name': 'Laundry Service', + 'price_unit': self.total_amount, + })] + }) + for order in self: + for line in order.order_line_ids: + self.env['washing.washing'].create( + {'name': line.product_id.name + '-Washing', + 'user_id': line.washing_type_id.assigned_person_id.id, + 'description': line.description, + 'laundry_id': line.id, + 'state': 'draft', + 'washing_date': datetime.now().strftime( + '%Y-%m-%d %H:%M:%S')}) + + def action_create_invoice(self): + """Creating a new invoice for the laundry orders.""" + if self.sale_id.state in ['draft', 'sent']: + self.sale_id.action_confirm() + self.invoice_status = self.sale_id.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_id': self.sale_id.id}, + 'target': 'new' + } + + def action_return_dress(self): + """Return dress after laundry""" + self.state = 'return' + + def action_cancel_order(self): + """Cancel the laundry order""" + self.state = 'cancel' + + def _compute_invoice_count(self): + """Compute the invoice count.""" + for order in self: + order.invoice_count = len(order.env['account.move'].search( + [('invoice_origin', '=', order.sale_id.name)])) + + def _compute_work_count(self): + """Computing the work count""" + if self.id: + wrk_ordr_ids = self.env['washing.washing'].search( + [('laundry_id.laundry_id.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_id.laundry_id.id', '=', self.id)]) + work_ids = [] + for each in work_obj: + work_ids.append(each.id) + view_id = self.env.ref('laundry_management.washing_washing_view_form').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': 'list,form', + 'res_model': 'washing.washing', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'name': _('Works'), + } + return value + + def action_view_invoice(self): + """Function for viewing Laundry orders invoices.""" + self.ensure_one() + inv_ids = [] + for each in self.env['account.move'].search( + [('invoice_origin', '=', self.sale_id.name)]): + inv_ids.append(each.id) + if inv_ids: + if len(inv_ids) <= 1: + value = { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'account.move', + 'view_id': self.env.ref('account.view_move_form').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': 'list,form', + 'res_model': 'account.move', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'name': _('Invoice'), + } + return value + + +class LaundryOrderLine(models.Model): + """Laundry order lines generating model""" + _name = 'laundry.order.line' + _description = "Laundry Order Line" + + product_id = fields.Many2one('product.product', string='Dress', + required=True, help="Name of the product") + qty = fields.Integer(string='No of items', required=True, + help="Number of quantity") + description = fields.Text(string='Description', + help='Description of the line.') + washing_type_id = fields.Many2one('washing.type', string='Washing Type', + required=True, + help='Select the type of wash') + extra_work_ids = fields.Many2many('washing.work', string='Extra Work', + help='Add if any extra works') + amount = fields.Float(compute='_compute_amount', string='Amount', + help='Total amount of the line.') + laundry_id = fields.Many2one('laundry.order', string='Laundry Order', + help='Corresponding laundry order') + state = fields.Selection([ + ('draft', 'Draft'), + ('wash', 'Washing'), + ('extra_work', 'Make Over'), + ('done', 'Done'), + ('cancel', 'Cancelled'), + ], string='Status of the line', readonly=True, copy=False, index=True, + default='draft') + + @api.depends('washing_type_id', 'extra_work_ids', 'qty') + def _compute_amount(self): + """Compute the total amount""" + for line in self: + total = line.washing_type_id.amount * line.qty + for each in line.extra_work_ids: + total += each.amount * line.qty + line.amount = total diff --git a/laundry_management/models/sale_advance_payment.py b/laundry_management/models/sale_advance_payment.py new file mode 100644 index 000000000..890304371 --- /dev/null +++ b/laundry_management/models/sale_advance_payment.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 . +# +############################################################################### +import time +from odoo import models, _ +from odoo.exceptions import UserError + + +class SaleAdvancePaymentInv(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.""" + laundry_sale_id = self._context.get('laundry_sale_id') + sale_order = self.env['sale.order'] + if laundry_sale_id: + sale_orders = sale_order.browse(laundry_sale_id) + else: + sale_orders = 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) + 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 = self.env['sale.order.line'].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): + """Function for creating invoice""" + 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..bf6c6443b --- /dev/null +++ b/laundry_management/models/washing_type.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 fields, models + + +class WashingType(models.Model): + """Washing types generating model""" + _name = 'washing.type' + _description = "Washing TYpe" + + name = fields.Char(string='Name', required=True, + help='Name of Washing type.') + assigned_person_id = fields.Many2one('res.users', + string='Assigned Person', + required=True, + help="Name of assigned person") + amount = fields.Float(string='Service Charge', required=True, + help='Service charge of this type') diff --git a/laundry_management/models/washing_washing.py b/laundry_management/models/washing_washing.py new file mode 100644 index 000000000..c1d8b96de --- /dev/null +++ b/laundry_management/models/washing_washing.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 datetime import datetime +from odoo import api, fields, models + + +class WashingWashing(models.Model): + """Washing activity generating model""" + _name = 'washing.washing' + _description = 'Washing Washing' + + name = fields.Char(string='Work', help='Mention the work') + laundry_works = fields.Boolean(default=False, help='For set conditions') + 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', + help='Add the description') + state = fields.Selection([ + ('draft', 'Draft'), + ('process', 'Process'), + ('done', 'Done'), + ('cancel', 'Cancelled'), + ], string='Status', readonly=True, copy=False, index=True, default='draft', + help='State of wash') + laundry_id = fields.Many2one('laundry.order.line') + product_line_ids = fields.One2many('wash.order.line', 'wash_id', + string='Products', ondelete='cascade', + help='Related Products for wash.') + total_amount = fields.Float(compute='_compute_total_amount', + string='Grand Total') + + def start_wash(self): + """Function for initiating the activity of washing.""" + if not self.laundry_works: + self.laundry_id.state = 'wash' + self.laundry_id.laundry_id.state = 'process' + for wash in self: + for line in wash.product_line_ids: + self.env['sale.order.line'].create( + {'product_id': line.product_id.id, + 'name': line.name, + 'price_unit': line.price_unit, + 'order_id': wash.laundry_id.laundry_id.sale_id.id, + 'product_uom_qty': line.quantity, + 'product_uom': line.uom_id.id, + }) + self.state = 'process' + + def action_set_to_done(self): + """Function for set to done.""" + self.state = 'done' + f = 0 + if not self.laundry_works: + if self.laundry_id.extra_work_ids: + for each in self.laundry_id.extra_work_ids: + self.create({'name': each.name, + 'user_id': each.assigned_person_id.id, + 'description': self.laundry_id.description, + 'laundry_id': self.laundry_id.id, + 'state': 'draft', + 'laundry_works': True, + 'washing_date': datetime.now().strftime( + '%Y-%m-%d %H:%M:%S')}) + self.laundry_id.state = 'extra_work' + laundry_id = self.search([('laundry_id.laundry_id', '=', + self.laundry_id.laundry_id.id)]) + for each in laundry_id: + if each.state != 'done' or each.state == 'cancel': + f = 1 + break + if f == 0: + self.laundry_id.laundry_id.state = 'done' + laundry = self.search([('laundry_id', '=', self.laundry_id.id)]) + f1 = 0 + for each in laundry: + if each.state != 'done' or each.state == 'cancel': + f1 = 1 + break + if f1 == 0: + self.laundry_id.state = 'done' + + @api.depends('product_line_ids') + def _compute_total_amount(self): + """Total of the line""" + total = 0 + for obj in self: + for each in obj.product_line_ids: + total += each.subtotal + obj.total_amount = total + + +class WashOrderLine(models.Model): + """For creating order lines in washing.""" + _name = 'wash.order.line' + _description = 'Wash Order Line' + + wash_id = fields.Many2one('washing.washing', string='Order Reference', + help='Order reference from washing', + ondelete='cascade') + name = fields.Text(string='Description', required=True, + help='Add description') + uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True) + quantity = fields.Integer(string='Quantity', + help='Add the required quantity') + product_id = fields.Many2one('product.product', string='Product', + help='Order line Product') + price_unit = fields.Float('Unit Price', default=0.0, + related='product_id.list_price', + help='Unit price of Product') + subtotal = fields.Float(compute='_compute_subtotal', string='Subtotal', + readonly=True, store=True, + help='Subtotal of the order line') + + @api.depends('price_unit', 'quantity') + def _compute_subtotal(self): + """Computing the subtotal""" + total = 0 + for wash in self: + total += wash.price_unit * wash.quantity + wash.subtotal = total diff --git a/laundry_management/models/washing_work.py b/laundry_management/models/washing_work.py new file mode 100644 index 000000000..76e7fafe5 --- /dev/null +++ b/laundry_management/models/washing_work.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 fields, models + + +class WashingWork(models.Model): + """Model for creating extra work for washing.""" + _name = 'washing.work' + _description = 'Washing Work' + + name = fields.Char(string='Name', required=True) + assigned_person_id = fields.Many2one('res.users', + string='Assigned Person', + required=True, + help="Name of assigned person") + amount = fields.Float(string='Service Charge', required=True, + help='Service charge for the extra work') diff --git a/laundry_management/reports/__init__.py b/laundry_management/reports/__init__.py new file mode 100755 index 000000000..4294370eb --- /dev/null +++ b/laundry_management/reports/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 report_laundry_order diff --git a/laundry_management/reports/report_laundry_order.py b/laundry_management/reports/report_laundry_order.py new file mode 100755 index 000000000..1f036bf0e --- /dev/null +++ b/laundry_management/reports/report_laundry_order.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Ammu Raj (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 fields, models, tools + + +class ReportLaundryOrder(models.Model): + """Model for checking the history of all laundry orders.""" + _name = "report.laundry.order" + _description = "Report Laundry Order" + _order = 'name desc' + _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_id = 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') + + 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_id as laundry_person_id, + 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_id, + 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..ba3c10837 --- /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,group_laundry_user,1,1,0,0 +access_laundry_order_manager,access.laundry.order.manager,model_laundry_order,group_laundry_manager,1,1,1,1 +access_laundry_order_line_user,access.laundry.order.line.user,model_laundry_order_line,group_laundry_user,1,1,0,0 +access_laundry_order_line_manager,access.laundry.order.line.manager,model_laundry_order_line,group_laundry_manager,1,1,1,1 +access_washing_type_user,access.washing.type.user,model_washing_type,group_laundry_user,1,0,0,0 +access_washing_type_manager,access.washing.type.manager,model_washing_type,group_laundry_manager,1,1,1,1 +access_washing_work_user,access.washing.work.user,model_washing_work,group_laundry_user,1,0,0,0 +access_washing_work_manager,access.washing.work.manager,model_washing_work,group_laundry_manager,1,1,1,1 +access_washing_washing_user,access.washing.washing.user,model_washing_washing,group_laundry_user,1,1,1,0 +access_washing_washing_manager,access.washing.washing.manager,model_washing_washing,group_laundry_manager,1,1,1,1 +access_wash_order_line_user,access.wash.order.line.user,model_wash_order_line,group_laundry_user,1,1,1,0 +access_wash_order_line_manager,access.wash.order.line.manager,model_wash_order_line,group_laundry_manager,1,1,1,1 +access_report_laundry_order_user,access.report.laundry.order.user,model_report_laundry_order,group_laundry_user,1,0,0,0 +access_report_laundry_order_manager,access.report.laundry.order.manager,model_report_laundry_order,group_laundry_manager,1,1,1,1 +access_sale_order_laundry_manager,access.sale.order.order.laundry.manager,sale_management.model_sale_order,group_laundry_manager,1,1,1,1 +access_sale_order_line_laundry_manager,access.sale.order.line.order.laundry.manager,sale_management.model_sale_order_line,group_laundry_manager,1,1,1,1 +access_sale_order_laundry_user,access.sale.order.laundry.user,sale_management.model_sale_order,group_laundry_user,1,1,1,1 +access_sale_order_line_laundry_user,access.sale.order.line.laundry.user,sale_management.model_sale_order_line,group_laundry_user,1,1,1,1 diff --git a/laundry_management/security/laundry_management_security.xml b/laundry_management/security/laundry_management_security.xml new file mode 100755 index 000000000..fff17a847 --- /dev/null +++ b/laundry_management/security/laundry_management_security.xml @@ -0,0 +1,33 @@ + + + + + Laundry + 18 + + + User + + + + + Manager + + + + + + Laundry Manager: Full access + + [(1,'=',1)] + + + + User: own document only + + [('laundry_person_id.id','=',user.id)] + + + + diff --git a/laundry_management/static/description/assets/cybro-icon.png b/laundry_management/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/laundry_management/static/description/assets/cybro-icon.png differ diff --git a/laundry_management/static/description/assets/cybro-odoo.png b/laundry_management/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/laundry_management/static/description/assets/cybro-odoo.png differ diff --git a/laundry_management/static/description/assets/h2.png b/laundry_management/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/laundry_management/static/description/assets/h2.png differ diff --git a/laundry_management/static/description/assets/icons/arrows-repeat.svg b/laundry_management/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/laundry_management/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-1.png b/laundry_management/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/laundry_management/static/description/assets/icons/banner-1.png differ diff --git a/laundry_management/static/description/assets/icons/banner-2.svg b/laundry_management/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-bg.png b/laundry_management/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/laundry_management/static/description/assets/icons/banner-bg.png differ diff --git a/laundry_management/static/description/assets/icons/banner-bg.svg b/laundry_management/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-call.svg b/laundry_management/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-mail.svg b/laundry_management/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-pattern.svg b/laundry_management/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/banner-promo.svg b/laundry_management/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/laundry_management/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/brand-pair.svg b/laundry_management/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/laundry_management/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/close-icon.svg b/laundry_management/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/laundry_management/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + 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/collabarate-icon.svg b/laundry_management/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/laundry_management/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + 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/cybro-logo.png b/laundry_management/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/laundry_management/static/description/assets/icons/cybro-logo.png differ diff --git a/laundry_management/static/description/assets/icons/down.svg b/laundry_management/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/laundry_management/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/faq.png b/laundry_management/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/laundry_management/static/description/assets/icons/faq.png differ diff --git a/laundry_management/static/description/assets/icons/feature-icon.svg b/laundry_management/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/laundry_management/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/feature.png b/laundry_management/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/laundry_management/static/description/assets/icons/feature.png differ diff --git a/laundry_management/static/description/assets/icons/gear.svg b/laundry_management/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/laundry_management/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/hero.gif b/laundry_management/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..380654dfe Binary files /dev/null and b/laundry_management/static/description/assets/icons/hero.gif differ diff --git a/laundry_management/static/description/assets/icons/hire-odoo.svg b/laundry_management/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/laundry_management/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + 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/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/life-ring-icon.svg b/laundry_management/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/laundry_management/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + 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/mail.svg b/laundry_management/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/laundry_management/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + 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/notes.png b/laundry_management/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/laundry_management/static/description/assets/icons/notes.png differ diff --git a/laundry_management/static/description/assets/icons/notification icon.svg b/laundry_management/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/laundry_management/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/odoo-consultancy.svg b/laundry_management/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/laundry_management/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/laundry_management/static/description/assets/icons/odoo-licencing.svg b/laundry_management/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/laundry_management/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/laundry_management/static/description/assets/icons/odoo-logo.png b/laundry_management/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/laundry_management/static/description/assets/icons/odoo-logo.png differ diff --git a/laundry_management/static/description/assets/icons/patter.svg b/laundry_management/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/laundry_management/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/pattern1.png b/laundry_management/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/laundry_management/static/description/assets/icons/pattern1.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-piece-icon.svg b/laundry_management/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/laundry_management/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + 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/replace-icon.svg b/laundry_management/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/laundry_management/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + 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/screenshot-main.png b/laundry_management/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/laundry_management/static/description/assets/icons/screenshot-main.png differ diff --git a/laundry_management/static/description/assets/icons/screenshot.png b/laundry_management/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/laundry_management/static/description/assets/icons/screenshot.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/skype-fill.svg b/laundry_management/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/laundry_management/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/skype.png b/laundry_management/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/laundry_management/static/description/assets/icons/skype.png differ diff --git a/laundry_management/static/description/assets/icons/skype.svg b/laundry_management/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/laundry_management/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/laundry_management/static/description/assets/icons/star-1.svg b/laundry_management/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/laundry_management/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/star-2.svg b/laundry_management/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/laundry_management/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/laundry_management/static/description/assets/icons/support.png b/laundry_management/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/laundry_management/static/description/assets/icons/support.png differ diff --git a/laundry_management/static/description/assets/icons/test-1 - Copy.png b/laundry_management/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/laundry_management/static/description/assets/icons/test-1 - Copy.png differ diff --git a/laundry_management/static/description/assets/icons/test-1.png b/laundry_management/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/laundry_management/static/description/assets/icons/test-1.png differ diff --git a/laundry_management/static/description/assets/icons/test-2.png b/laundry_management/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/laundry_management/static/description/assets/icons/test-2.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/translate.svg b/laundry_management/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/laundry_management/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + 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/video.png b/laundry_management/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/laundry_management/static/description/assets/icons/video.png differ diff --git a/laundry_management/static/description/assets/icons/whatsapp.png b/laundry_management/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/laundry_management/static/description/assets/icons/whatsapp.png differ diff --git a/laundry_management/static/description/assets/icons/wrench-icon.svg b/laundry_management/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/laundry_management/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + 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/modules/1.gif b/laundry_management/static/description/assets/modules/1.gif new file mode 100755 index 000000000..ae3a880a2 Binary files /dev/null and b/laundry_management/static/description/assets/modules/1.gif differ diff --git a/laundry_management/static/description/assets/modules/2.gif b/laundry_management/static/description/assets/modules/2.gif new file mode 100755 index 000000000..d19e2b352 Binary files /dev/null and b/laundry_management/static/description/assets/modules/2.gif differ diff --git a/laundry_management/static/description/assets/modules/3.png b/laundry_management/static/description/assets/modules/3.png new file mode 100755 index 000000000..8513873ea 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 100755 index 000000000..3bedf7981 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 100755 index 000000000..0e311ca87 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.jpg b/laundry_management/static/description/assets/modules/6.jpg new file mode 100755 index 000000000..67c7f7062 Binary files /dev/null and b/laundry_management/static/description/assets/modules/6.jpg 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/assets/y18.jpg b/laundry_management/static/description/assets/y18.jpg new file mode 100644 index 000000000..eea1714f2 Binary files /dev/null and b/laundry_management/static/description/assets/y18.jpg differ diff --git a/laundry_management/static/description/banner.png b/laundry_management/static/description/banner.png new file mode 100644 index 000000000..d1cd3fadb Binary files /dev/null and b/laundry_management/static/description/banner.png differ diff --git a/laundry_management/static/description/icon.png b/laundry_management/static/description/icon.png new file mode 100644 index 000000000..53ce748a3 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..c88aef894 --- /dev/null +++ b/laundry_management/static/description/index.html @@ -0,0 +1,1152 @@ + + + + + + Laundry Management + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+ + + + +
+
+ +
+
+
+
+

+ Helps You To Manage Laundry Service. +

+

Laundry Management +

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

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. +

+
+
+ +
+
+ +
+
+
+ Laundry Management +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ 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. +

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

+ Confirm the + + Laundry Order +

+
+
+

+ 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. +

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

+ Extra 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. +

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

+ Invoices Smart Button + +

+
+
+

+ 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. +

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

+ Additional Works + +

+
+
+

+ 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.

+
+ +
+
+
+
+
+
+ +
+

+ Detailed Laundry + Work Analysis Report.

+
+
+
+
+
+
+
+ +
+

+ Billing Facility + for Extra Works.

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

+ You can easily track customer orders by navigating to the "Orders" section of the app. Here, you can view all current and past orders, including details like customer information, items submitted, and their status. You can also set reminders for due dates to ensure timely service. +

+
+
+ +
+ +
+

+ Yes, the app allows you to customize pricing based on different services offered. You can set up various service categories, such as washing, ironing, and special treatments, and specify prices for each service type, ensuring accurate billing for your customers. +

+
+
+ +
+ +
+

+ Absolutely! The app includes reporting features that allow you to generate detailed reports on various metrics, such as the number of orders processed, revenue generated, and customer feedback. These insights help you assess performance and identify areas for improvement. +

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

+ Latest Release 18.0.1.0.0 +

+ + 1st October, 2024 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + +
+

+ Related Products +

+ +
+ + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/laundry_management/views/label_templates.xml b/laundry_management/views/label_templates.xml new file mode 100755 index 000000000..8bf021586 --- /dev/null +++ b/laundry_management/views/label_templates.xml @@ -0,0 +1,51 @@ + + + + + + + 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..f93afacd7 --- /dev/null +++ b/laundry_management/views/laundry_order_views.xml @@ -0,0 +1,136 @@ + + + + + laundry.order.view.form + laundry.order + +
+
+
+ +
+ + +
+
+

+ +

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

+ Click to create a New Order. +

+
+
+ + + + + \ No newline at end of file diff --git a/laundry_management/views/report_laundry_order_views.xml b/laundry_management/views/report_laundry_order_views.xml new file mode 100755 index 000000000..bacc7b693 --- /dev/null +++ b/laundry_management/views/report_laundry_order_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. + + + + + + diff --git a/laundry_management/views/washing_type_views.xml b/laundry_management/views/washing_type_views.xml new file mode 100755 index 000000000..034ad6ec0 --- /dev/null +++ b/laundry_management/views/washing_type_views.xml @@ -0,0 +1,54 @@ + + + + + washing.type.view.form + washing.type + +
+ + + + + + + + + + + +
+
+
+ + + washing.type.view.list + washing.type + + + + + + + + + + + Washing Type + ir.actions.act_window + washing.type + list,form + + + + + + +
diff --git a/laundry_management/views/washing_washing_views.xml b/laundry_management/views/washing_washing_views.xml new file mode 100755 index 000000000..5f75bd4e1 --- /dev/null +++ b/laundry_management/views/washing_washing_views.xml @@ -0,0 +1,85 @@ + + + + + washing.washing.view.form + washing.washing + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + washing.washing.view.list + washing.washing + + + + + + + + + + + + Washing + ir.actions.act_window + washing.washing + list,form + [('user_id','=', uid)] + + + + diff --git a/laundry_management/views/washing_work_views.xml b/laundry_management/views/washing_work_views.xml new file mode 100644 index 000000000..77343f058 --- /dev/null +++ b/laundry_management/views/washing_work_views.xml @@ -0,0 +1,46 @@ + + + + + washing.work.view.form + washing.work + +
+ + + + + + + + + + + +
+
+
+ + + washing.work.view.list + washing.work + + + + + + + + + + + Additional Works + ir.actions.act_window + washing.work + list,form + + + +