Browse Source

[ADD] Initial Commit 'laundry_management'

pull/164/head
Ajmal Cybro 5 years ago
parent
commit
d0472537bf
  1. 40
      laundry_management/README.rst
  2. 24
      laundry_management/__init__.py
  3. 49
      laundry_management/__manifest__.py
  4. 8
      laundry_management/data/data.xml
  5. 10
      laundry_management/doc/RELEASE_NOTES.md
  6. 23
      laundry_management/models/__init__.py
  7. 476
      laundry_management/models/laundry.py
  8. 23
      laundry_management/reports/__init__.py
  9. 98
      laundry_management/reports/laundry_report.py
  10. 19
      laundry_management/security/ir.model.access.csv
  11. 34
      laundry_management/security/laundry_security.xml
  12. BIN
      laundry_management/static/description/banner.png
  13. BIN
      laundry_management/static/description/icon.png
  14. BIN
      laundry_management/static/description/images/advanced_stock.png
  15. BIN
      laundry_management/static/description/images/banner.png
  16. BIN
      laundry_management/static/description/images/barcode_scanning.jpeg
  17. BIN
      laundry_management/static/description/images/checked.png
  18. BIN
      laundry_management/static/description/images/cybrosys.png
  19. BIN
      laundry_management/static/description/images/export.jpeg
  20. BIN
      laundry_management/static/description/images/inventory_valuation.png
  21. BIN
      laundry_management/static/description/images/laundry.png
  22. BIN
      laundry_management/static/description/images/laundry1.png
  23. BIN
      laundry_management/static/description/images/laundry10.png
  24. BIN
      laundry_management/static/description/images/laundry11.png
  25. BIN
      laundry_management/static/description/images/laundry2.png
  26. BIN
      laundry_management/static/description/images/laundry3.png
  27. BIN
      laundry_management/static/description/images/laundry4.png
  28. BIN
      laundry_management/static/description/images/laundry5.png
  29. BIN
      laundry_management/static/description/images/laundry6.png
  30. BIN
      laundry_management/static/description/images/laundry7.png
  31. BIN
      laundry_management/static/description/images/laundry8.png
  32. BIN
      laundry_management/static/description/images/laundry9.png
  33. BIN
      laundry_management/static/description/images/product_barcode.png
  34. BIN
      laundry_management/static/description/images/stock_ageing.jpeg
  35. 406
      laundry_management/static/description/index.html
  36. 90
      laundry_management/views/config_view.xml
  37. 47
      laundry_management/views/laundry_label.xml
  38. 27
      laundry_management/views/laundry_report.xml
  39. 122
      laundry_management/views/laundry_view.xml
  40. 77
      laundry_management/views/washing_view.xml

40
laundry_management/README.rst

@ -0,0 +1,40 @@
Laundry Management v14
======================
This module helps you to manage laundry service.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developers: Jesni Banu@cybrosys
Nilmar Shereef@cybrosys
Version 13: Nimisha Murali@cybrosys
Version 14: Minhaj T @cybrosys
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 <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

24
laundry_management/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import models
from . import reports

49
laundry_management/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Laundry Management',
'version': '14.0.1.0.0',
'summary': """Complete Laundry Service Management""",
'description': 'This module is very useful to manage all process of laundry service',
"category": "Industries",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['base', 'mail', 'sale', 'account', 'uom'],
'data': [
'data/data.xml',
'security/laundry_security.xml',
'security/ir.model.access.csv',
'views/laundry_view.xml',
'views/washing_view.xml',
'views/config_view.xml',
'views/laundry_report.xml',
'views/laundry_label.xml',
],
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'demo': [],
'installable': True,
'auto_install': False,
'application': False,
}

8
laundry_management/data/data.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="laundry_service" model="product.product">
<field name="name">Laundry Service</field>
<field name="type">service</field>
<field name="invoice_policy">order</field>
</record>
</odoo>

10
laundry_management/doc/RELEASE_NOTES.md

@ -0,0 +1,10 @@
## Module <laundry_management>
#### 03.10.2020
#### Version 14.0.1.0.0
#### ADD
Initial commit for Laundry Management

23
laundry_management/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import laundry

476
laundry_management/models/laundry.py

@ -0,0 +1,476 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
import time
from datetime import datetime
from odoo import models, fields, api, _
from odoo.exceptions import UserError
class LaundryManagement(models.Model):
_name = 'laundry.order'
_inherit = 'mail.thread'
_description = "Laundry Order"
_order = 'order_date desc, id desc'
@api.model
def create(self, vals):
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):
total = 0
for obj in self:
for each in obj.order_lines:
total += each.amount
obj.total_amount = total
def confirm_order(self):
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):
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):
print('hello')
wrk_ordr_ids = self.env['account.move'].search([('invoice_origin', '=', self.sale_obj.name)])
self.invoice_count = len(wrk_ordr_ids)
print('Hi')
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):
work_obj = self.env['washing.washing'].search(
[('laundry_obj.laundry_obj.id', '=', self.id)])
print(work_obj)
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):
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)
sale_obj = fields.Many2one('sale.order', invisible=1)
invoice_count = fields.Integer(compute='_invoice_count',
string='# Invoice')
work_count = fields.Integer(compute='_work_count', string='# Works')
partner_id = fields.Many2one('res.partner', string='Customer',
readonly=True,
states={'draft': [('readonly', False)],
'order': [('readonly', False)]},
required=True,
change_default=True, index=True,
track_visibility='always')
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",
default=datetime.now().strftime(
'%Y-%m-%d %H:%M:%S'))
laundry_person = fields.Many2one('res.users', string='Laundry Person',
required=1)
order_lines = fields.One2many('laundry.order.line', 'laundry_obj',
required=1, ondelete='cascade')
total_amount = fields.Float(compute='get_total', string='Total', store=1)
currency_id = fields.Many2one("res.currency", string="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')
class LaundryManagementLine(models.Model):
_name = '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)
qty = fields.Integer(string='No of items', required=1)
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')
class WashingType(models.Model):
_name = 'washing.type'
name = fields.Char(string='Name', required=1)
assigned_person = fields.Many2one('res.users', string='Assigned Person',
required=1)
amount = fields.Float(string='Service Charge', required=1)
class ExtraWork(models.Model):
_name = 'washing.work'
name = fields.Char(string='Name', required=1)
assigned_person = fields.Many2one('res.users', string='Assigned Person',
required=1)
amount = fields.Float(string='Service Charge', required=1)
class Washing(models.Model):
_name = 'washing.washing'
def start_wash(self):
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')
washing_date = fields.Datetime(string='Date')
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):
_name = 'wash.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('product.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)
class LaundryManagementInvoice(models.TransientModel):
_inherit = 'sale.advance.payment.inv'
def create_invoices(self):
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.values'].sudo().set_default(
'sale.config.settings', 'deposit_product_id_setting',
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, amount):
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,
'invoice_payment_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,
'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)
return invoice

23
laundry_management/reports/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import laundry_report

98
laundry_management/reports/laundry_report.py

@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Jesni Banu and Nilmar Shereef(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 <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields, tools
class DifferedCheckHistory(models.Model):
_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)
partner_id = fields.Many2one('res.partner', string='Customer')
partner_invoice_id = fields.Many2one('res.partner', string='Invoice Address')
partner_shipping_id = fields.Many2one('res.partner', string='Delivery Address')
order_date = fields.Datetime(string="Date")
laundry_person = fields.Many2one('res.users', string='Laundry Person')
total_amount = fields.Float(string='Total')
currency_id = fields.Many2one("res.currency", string="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()))

19
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
laundry_model_access_right_user,laundry_model_access_right,model_laundry_order,laundry_group_user,1,1,0,0
laundry_model_access_right_manager,laundry_model_access_right1,model_laundry_order,laundry_group_manager,1,1,1,1
laundry_order_line_model_access_right_user,laundry_order_line_model_access_right,model_laundry_order_line,laundry_group_user,1,1,0,0
laundry_order_line_model_access_right_manager,laundry_order_line_model_access_right1,model_laundry_order_line,laundry_group_manager,1,1,1,1
laundry_washing_type_model_access_right_user,laundry_washing_type_model_access_right,model_washing_type,laundry_group_user,1,0,0,0
laundry_washing_type_model_access_right_manager,laundry_washing_type_model_access_right1,model_washing_type,laundry_group_manager,1,1,1,1
laundry_washing_work_model_access_right_user,laundry_model_washing_work_access_right,model_washing_work,laundry_group_user,1,0,0,0
laundry_washing_work_model_access_right_manager,laundry_model_washing_work_access_right1,model_washing_work,laundry_group_manager,1,1,1,1
laundry_washing_washing_model_access_right_user,laundry_model_washing_washing_access_right,model_washing_washing,laundry_group_user,1,1,1,0
laundry_washing_washing_model_access_right_manager,laundry_model_washing_washing_access_right1,model_washing_washing,laundry_group_manager,1,1,1,1
laundry_wash_order_line_model_access_right_user,laundry_model_wash_order_line_access_right,model_wash_order_line,laundry_group_user,1,1,1,0
laundry_wash_order_line_model_access_right_manager,laundry_model_wash_order_line_access_right1,model_wash_order_line,laundry_group_manager,1,1,1,1
laundry_report_laundry_order_model_access_right_user,laundry_model_report_laundry_order_access_right,model_report_laundry_order,laundry_group_user,1,0,0,0
laundry_report_laundry_order_model_access_right_manager,laundry_model_report_laundry_order_access_right1,model_report_laundry_order,laundry_group_manager,1,1,1,1
laundry_report_laundry_order_model_access_right_manager1,laundry_model_report_laundry_order_access_right11,sale.model_sale_order,laundry_group_manager,1,1,1,1
laundry_report_laundry_order_model_access_right_manager12,laundry_model_report_laundry_order_access_right112,sale.model_sale_order_line,laundry_group_manager,1,1,1,1
laundry_report_laundry_order_model_access_right_manager11,laundry_model_report_laundry_order_access_right111,sale.model_sale_order,laundry_group_user,1,1,1,1
laundry_report_laundry_order_model_access_right_manager112,laundry_model_report_laundry_order_access_right1112,sale.model_sale_order_line,laundry_group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 laundry_model_access_right_user laundry_model_access_right model_laundry_order laundry_group_user 1 1 0 0
3 laundry_model_access_right_manager laundry_model_access_right1 model_laundry_order laundry_group_manager 1 1 1 1
4 laundry_order_line_model_access_right_user laundry_order_line_model_access_right model_laundry_order_line laundry_group_user 1 1 0 0
5 laundry_order_line_model_access_right_manager laundry_order_line_model_access_right1 model_laundry_order_line laundry_group_manager 1 1 1 1
6 laundry_washing_type_model_access_right_user laundry_washing_type_model_access_right model_washing_type laundry_group_user 1 0 0 0
7 laundry_washing_type_model_access_right_manager laundry_washing_type_model_access_right1 model_washing_type laundry_group_manager 1 1 1 1
8 laundry_washing_work_model_access_right_user laundry_model_washing_work_access_right model_washing_work laundry_group_user 1 0 0 0
9 laundry_washing_work_model_access_right_manager laundry_model_washing_work_access_right1 model_washing_work laundry_group_manager 1 1 1 1
10 laundry_washing_washing_model_access_right_user laundry_model_washing_washing_access_right model_washing_washing laundry_group_user 1 1 1 0
11 laundry_washing_washing_model_access_right_manager laundry_model_washing_washing_access_right1 model_washing_washing laundry_group_manager 1 1 1 1
12 laundry_wash_order_line_model_access_right_user laundry_model_wash_order_line_access_right model_wash_order_line laundry_group_user 1 1 1 0
13 laundry_wash_order_line_model_access_right_manager laundry_model_wash_order_line_access_right1 model_wash_order_line laundry_group_manager 1 1 1 1
14 laundry_report_laundry_order_model_access_right_user laundry_model_report_laundry_order_access_right model_report_laundry_order laundry_group_user 1 0 0 0
15 laundry_report_laundry_order_model_access_right_manager laundry_model_report_laundry_order_access_right1 model_report_laundry_order laundry_group_manager 1 1 1 1
16 laundry_report_laundry_order_model_access_right_manager1 laundry_model_report_laundry_order_access_right11 sale.model_sale_order laundry_group_manager 1 1 1 1
17 laundry_report_laundry_order_model_access_right_manager12 laundry_model_report_laundry_order_access_right112 sale.model_sale_order_line laundry_group_manager 1 1 1 1
18 laundry_report_laundry_order_model_access_right_manager11 laundry_model_report_laundry_order_access_right111 sale.model_sale_order laundry_group_user 1 1 1 1
19 laundry_report_laundry_order_model_access_right_manager112 laundry_model_report_laundry_order_access_right1112 sale.model_sale_order_line laundry_group_user 1 1 1 1

34
laundry_management/security/laundry_security.xml

@ -0,0 +1,34 @@
<?xml version="1.0" ?>
<odoo>
<data>
<record id="module_laundry_category" model="ir.module.category">
<field name="name">Laundry</field>
<field name="sequence">18</field>
</record>
<record id="laundry_group_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="module_laundry_category"/>
<field name="users" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="laundry_group_manager" model="res.groups">
<field name="name">Manager</field>
<field name="implied_ids" eval="[(4, ref('laundry_group_user'))]"/>
<field name="category_id" ref="module_laundry_category"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
<record id="laundry_order_admin_rule" model="ir.rule">
<field name="name">laundry manager: full access</field>
<field name="model_id" ref="model_laundry_order"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4,ref('laundry_group_manager'))]"/>
</record>
<record id="laundry_order_user_rule" model="ir.rule">
<field name="name">user: own document only</field>
<field name="model_id" ref="model_laundry_order"/>
<field name="domain_force">[('laundry_person.id','=',user.id)]</field>
<field name="groups" eval="[(4,ref('laundry_group_user'))]"/>
</record>
</data>
</odoo>

BIN
laundry_management/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
laundry_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
laundry_management/static/description/images/advanced_stock.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
laundry_management/static/description/images/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

BIN
laundry_management/static/description/images/barcode_scanning.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

BIN
laundry_management/static/description/images/checked.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
laundry_management/static/description/images/cybrosys.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
laundry_management/static/description/images/export.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
laundry_management/static/description/images/inventory_valuation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
laundry_management/static/description/images/laundry.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
laundry_management/static/description/images/laundry1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
laundry_management/static/description/images/laundry10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
laundry_management/static/description/images/laundry11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
laundry_management/static/description/images/laundry2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
laundry_management/static/description/images/laundry3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
laundry_management/static/description/images/laundry4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
laundry_management/static/description/images/laundry5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
laundry_management/static/description/images/laundry6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
laundry_management/static/description/images/laundry7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
laundry_management/static/description/images/laundry8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
laundry_management/static/description/images/laundry9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
laundry_management/static/description/images/product_barcode.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
laundry_management/static/description/images/stock_ageing.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

406
laundry_management/static/description/index.html

@ -0,0 +1,406 @@
<div class="row" style="margin: 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4;text-align: center; margin: auto; display: flex;justify-content: center;"> <a href="https://www.cybrosys.com/" target="_blank"><img src="images/cybrosys.png" style=" width: 293px; padding: 1rem 0rem; margin: auto" alt="cybrosys-logo"></a> </div>
<div class="row" style="margin:75px 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4; padding-bottom: 30px;">
<div class="col-md-7 col-sm-12 col-xs-12" style="padding: 0px">
<div style=" margin: 0 0 0px;padding: 20px 0 10;font-size: 23px;line-height: 35px;font-weight: 400;color: #000;border-top: 1px solid rgba(255,255,255,0.1);border-bottom: 1px solid rgba(255,255,255,0.11);text-align: left;">
<h1 style="font-size: 39px;font-weight: 600;margin: 0px !important;">Laundry Service Management </h1>
<h3 style="font-size: 21px;margin-top: 8px;position: relative;">Cybrosys Industrial Module Which Helps You To Manage Laundry Service </h3>
</div>
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">Key Highlights</h2>
<ul style=" padding: 0 1px; list-style: none; ">
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Recording Laundry Order. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Assigning Works. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Make Invoices. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Separate View for Works. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Billing Facility for Extra Works. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Label Printing for Every Order. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Detailed Laundry Work Analysis Report. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Access Rights From Multiple Level. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Configuration for Washing Type. </li>
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Configuration for Extra Works (Ironing/Patching etc..). </li>
</ul>
</div>
<div class="col-md-5 col-sm-12 col-xs-12"> <img src="images/laundry.png" class="img-responsive" alt=""> </div>
</div>
<div>
<section class="oe_container" style="padding: 1rem 0rem 1rem; background-color: #ffffff !important;">
<div class="row py-4 px-3">
<div class="w-100" style="padding-top:30px;padding-bottom:45px;border-radius: 10px;">
<ul role="tablist" class="nav nav-pills justify-content-center" data-tabs="tabs" id="pills-tab" style="border: none;background: unset;">
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link active show" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400;text-align: center;
color: #fff;">Overview </a> </li>
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-video" role="tab" aria-controls="pills-profile" aria-selected="false" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;
color: #fff;">Configuration </a> </li>
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home1" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link " style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;
color: #fff;" >Features </a> </li>
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center;
color: #fff;">Screenshots </a> </li>
</ul>
<div class="tab-content" id="pills-tabContent"
style="padding-top: 30px; padding-bottom: 30px; padding: 30px;">
<div class="px-3 pt-1 tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby="
pills-home-tab">
<!-- Overview-->
<h2 style="font-weight: 600;text-align: center;width: 100%;">Overview</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<h3 class="oe_slogan" style="text-align: center;font-size: 19px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 31px;font-weight: 400;letter-spacing: .5px;margin-bottom: 21px;">
This is an industrial specific module by Cybrosys Technologies for Laundry Management. It manages the laundry process with assigning works to workers.
</h3>
</div>
<div class="px-3 pt-1 tab-pane fade" id="pills-video" role="tabpanel" aria-labelledby="
pills-home-tab">
<h2 style="font-weight: 600;text-align: center;width: 100%;">Configuration</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<ul>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Access Rights
</li>
<p>Laundry Manager : Laundry manager have all the access across the laundry service management </p>
<p>Laundry User : Laundry user can read, write and create the records.</p>
</ul>
</div>
<div class="px-3 pt-1 tab-pane fade " id="pills-home1" role="tabpanel" aria-labelledby="
pills-home-tab">
<!-- feature tab-->
<h2 style="font-weight: 600;text-align: center;width: 100%;">Laundry Service Management </h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<ul>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Recording Laundry Order.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Assigning Works.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Make Invoices.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Separate View for Works.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Billing Facility for Extra Works.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Label Printing for Every Order.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Detailed Laundry Work Analysis Report.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Access Rights From Multiple Level.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Configuration for Washing Type.
</li>
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;">
<i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i>Configuration for Extra Works (Ironing/Patching etc..).
</li>
</ul>
</div>
<!-- Screenshot tab-->
<div class="px-3 tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" >
<div class="tab-pane">
<h2 style="font-weight: 600;text-align: center;width: 100%;">Screenshots</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<div>
<section class="oe_container">
<div id="demo" class="row carousel slide mb32" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active" style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Recording Laundry Order </h3>
<p> <q><strong>Laundry Management -> Laundry Management -> Laundry Order</strong></q> </p>
<p>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 order. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry1.png"> </div>
<p>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. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry2.png"> </div>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry3.png"> </div>
</div>
</div>
<div class="carousel-item" style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Laundry Label </h3>
<p>You can print label for each order from the print menu. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry4.png"> </div>
</div>
</div>
<div class="carousel-item " style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Laundry Works </h3>
<p> <q><strong>Laundry Management -> Laundry Management -> Laundry Works</strong></q> </p>
<p>This is the Separate Laundry Works Form. Here you can see the work status of Laundry Works.</p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry5.png"> </div>
<p>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'. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry6.png"> </div>
</div>
</div>
<div class="carousel-item " style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Invoice </h3>
<p>You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' state. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry7.png"> </div>
<p>You can see all the Invoice through the smart button "Invoices" from the Laundry Order form.
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry8.png"> </div>
</div>
</div>
<div class="carousel-item " style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Configuration </h3>
<p>You can configure washing types from the menu Laundry Management -> Configuration -> Washing Type by specifying the name, assigned person and service charge </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry9.png"> </div>
<p>You can configure additional works from the menu Laundry Management -> Configuration -> Additional Works by specifying the name, assigned person and service charge </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry10.png"> </div>
</div>
</div>
<div class="carousel-item " style="min-height: 0px;">
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;">
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> Laundry Work Analysis Report </h3>
<p>You can also analyse your all Laundry Works from Laundry Management -> Report -> Laundry Order Analysis. </p>
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/laundry11.png"> </div>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next" href="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a>
</div>
</section>
</div>
</div>
</div>
<!-- faq tab-->
<div class="px-2 px-lg-4 pt-3 tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab">
<ul class="list-unstyled">
</ul>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Suggested Products</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height: 0px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/13.0/product_barcode/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/product_barcode.png"> </div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/13.0/barcode_scanning_sale_purchase/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/barcode_scanning.jpeg"> </div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/13.0/stock_move_report/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/advanced_stock.png"> </div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height: 0px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/12.0/product_ageing_report/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/stock_ageing.jpeg"> </div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/13.0/stock_valuation_report/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/inventory_valuation.png"> </div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
<a href="https://apps.odoo.com/apps/modules/13.0/export_stockinfo_xls/" target="_blank">
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/export.jpeg"> </div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a>
</div>
</section>
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Service</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<div class="row" style=" display: flex; justify-content: center; flex-wrap: wrap;width: 100%; ">
<!-- <div style="display:flex;padding-top: 20px;justify-content: space-between;"> -->
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-customization.png" style="width: 100%;border-radius: 100%;"/> </a> </div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Customization </a> </h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" style="width: 100%;border-radius: 100%;"/> </a> </div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Implementation </a> </h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-integration.png" style="width: 100%;border-radius: 100%;"/> </a> </div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Integration </a> </h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-support.png" style="width: 100%;border-radius: 100%;"/> </a> </div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Support</a> </h3>
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> <img src="https://www.cybrosys.com/images/hire-odoo-developer.png" style="width: 100%;border-radius: 100%;"/> </a> </div>
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hire Odoo Developers</a> </h3>
</a>
</div>
<!-- </div> -->
</div>
</section>
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px">
<div class="row" style="margin: 0">
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Industries</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<!-- <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> -->
<div class="row" style="width: 100%">
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Trading </a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Easily procure and sell your products. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;" style=" margin-bottom: 10px; ">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Manufacturing</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Plan, track and schedule your operations. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Restaurant</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Run your bar or restaurant methodical. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> POS</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Easy configuring and convivial selling. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> E-commerce & Website</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Mobile friendly, awe-inspiring product pages. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hotel Management</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> An all-inclusive hotel management application. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Education</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> A Collaborative platform for educational management. </h3>
</div>
</div>
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; ">
<div >
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div>
</div>
<div style="width:70%;float:left;">
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Service Management</a> </h3>
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Keep track of services and invoice accordingly. </h3>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 0% 0% 6% 0%;">
<center>
<div class="col-md-12" style="margin: auto !important;
width: 70%;
padding: 30px;">
<h2 style="font-weight: 600;text-align: center;width: 100%;">Need Any Help?</h2>
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;">
<h4 style="font-size:16px;"> If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support. </h4>
<div class="col-md-6" style="float:left; padding:20px;">
<h4><i class="fa fa-envelope"></i>Email us </h4>
<p>odoo@cybrosys.com / info@cybrosys.com</p>
</div>
<div class="col-md-6" style="float:left; padding:20px;">
<h4><i class="fa fa-phone"></i> Contact Us </h4>
<a href="https://www.cybrosys.com/contact/" target="_blank"> www.cybrosys.com</a>
</div>
</div>
</center>
</section>
<section class="oe_container" style="padding: 0% 0% 6% 0%;">
<div class="oe_slogan" style="margin-bottom: 0px;">
<div style=" display: flex; justify-content: center; flex-wrap: wrap; ">
</div>
<br>
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block">
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "> <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
</td>
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
</td>
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px; height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
</td>
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a>
</td>
</div>
</div>
</section>
</div>

90
laundry_management/views/config_view.xml

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="washing_type_form_view" model="ir.ui.view">
<field name="name">washing.type.form</field>
<field name="model">washing.type</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
<field name="assigned_person"/>
</group>
<group>
<field name="amount"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="washing_type_tree_view" model="ir.ui.view">
<field name="name">washing.type.tree</field>
<field name="model">washing.type</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="assigned_person"/>
<field name="amount"/>
</tree>
</field>
</record>
<record id="action_washing_type" model="ir.actions.act_window">
<field name="name">Washing Type</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">washing.type</field>
<field name="view_mode">tree,form</field>
</record>
<record id="washing_work_form_view" model="ir.ui.view">
<field name="name">washing.work.form</field>
<field name="model">washing.work</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
<field name="assigned_person"/>
</group>
<group>
<field name="amount"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="washing_work_tree_view" model="ir.ui.view">
<field name="name">washing.work.tree</field>
<field name="model">washing.work</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="assigned_person"/>
<field name="amount"/>
</tree>
</field>
</record>
<record id="action_washing_work" model="ir.actions.act_window">
<field name="name">Additional Works</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">washing.work</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="laundry_config_menu" name="Configuration" parent="laundry_management_menu" sequence="3"/>
<menuitem id="laundry_customer" name="Customers" parent="laundry_config_menu" action="base.action_partner_customer_form" sequence="1"/>
<menuitem id="laundry_products" name="Products" parent="laundry_config_menu" action="product.product_normal_action_sell" sequence="2"/>
<menuitem id="laundry_washing_type" name="Washing Type" parent="laundry_config_menu" action="action_washing_type" sequence="3"/>
<menuitem id="laundry_washing_work" name="Additional Works" parent="laundry_config_menu" action="action_washing_work" sequence="4"/>
</data>
</odoo>

47
laundry_management/views/laundry_label.xml

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<template id="laundry_order_label">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="obj">
<t t-call="web.external_layout">
<div class="page">
<div class="col-xs-4" style="padding:0;">
<table style="border: 2px solid black;border-spacing:0;margin-bottom:0;height:122px;" class="table">
<tbody>
<tr>
<th style="text-align: left; vertical-align: middle;" colspan="2">
<span t-esc="obj.name"/>
</th>
<th style="text-align: right; vertical-align: middle;" colspan="2">
<span t-esc="obj.order_date"/>
</th>
</tr>
<tr>
<td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2">
<span>CUSTOMER</span>
</td>
<td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2">
<span t-esc="obj.partner_id.name"/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</t>
</t>
</t>
</template>
<report
string="Laundry Order Label"
id="laundry_label"
model="laundry.order"
report_type="qweb-pdf"
name="laundry_management.laundry_order_label"
file="laundry_management.laundry_order_label"/>
</data>
</odoo>

27
laundry_management/views/laundry_report.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="view_report_laundry_order" model="ir.ui.view">
<field name="name">report.laundry.order.pivot</field>
<field name="model">report.laundry.order</field>
<field name="arch" type="xml">
<pivot string="Laundry Order Analysis" display_quantity="true" disable_linking="True">
<field name="name" type="row"/>
</pivot>
</field>
</record>
<record id="action_laundry_order_analysis" model="ir.actions.act_window">
<field name="name">Laundry Order Analysis</field>
<field name="res_model">report.laundry.order</field>
<field name="view_mode">pivot</field>
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
<field name="help">This report allows you to analyse the performance of your Laundry Mangement. </field>
</record>
<menuitem id="laundry_report_menu" name="Report" parent="laundry_management_menu" sequence="2"/>
<menuitem name="Laundry Order Analysis" action="action_laundry_order_analysis" id="menu_laundry_order_analysis" parent="laundry_report_menu" sequence="1"/>
</data>
</odoo>

122
laundry_management/views/laundry_view.xml

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="sequence_laundry" model="ir.sequence">
<field name="name">Laundry Order Code</field>
<field name="code">laundry.order</field>
<field eval="4" name="padding" />
<field name="prefix">LO</field>
</record>
<record id="laundry_order_form_view" model="ir.ui.view">
<field name="name">laundry.order.form</field>
<field name="model">laundry.order</field>
<field name="arch" type="xml">
<form string="Laundry Order" class="o_sale_order">
<header>
<button name="confirm_order" class="oe_highlight" string="Confirm Order" type="object" states="draft"/>
<button name="create_invoice" class="oe_highlight" string="Create Invoice" type="object"
attrs="{'invisible': ['|',('invoice_status', '=', 'invoiced'), ('state', '!=', 'done')]}"/>
<button name="return_dress" string="Return" class="oe_highlight" type="object" states="done"/>
<button name="cancel_order" string="Cancel" type="object" states="draft"/>
<field name="state" widget="statusbar" statusbar_visible="draft,order,done,return"/>
</header>
<sheet>
<div class="oe_button_box" name="buttons">
<button name='action_view_laundry_works' class="oe_stat_button" type="object" icon="fa-money" states="order,done,return,process">
<field string="Works" name="work_count" widget="statinfo" />
</button>
<button name='action_view_invoice' class="oe_stat_button" type="object" icon="fa-money" states="done,return">
<field string="Invoice" name="invoice_count" widget="statinfo" />
</button>
</div>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<group>
<group>
<field name="partner_id"/>
<field name="partner_invoice_id" context="{'default_type':'invoice'}"
attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/>
<field name="partner_shipping_id" context="{'default_type':'delivery'}"
attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/>
</group>
<group>
<field name="order_date" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="currency_id" attrs="{'readonly': [('state','!=','draft')]}"/>
<field name="laundry_person" attrs="{'readonly': [('state','in',('return', 'cancel'))]}"/>
<field name="invoice_status" invisible="1"/>
<field name="sale_obj" invisible="1"/>
</group>
</group>
<notebook>
<page string="Order Lines">
<field name="order_lines" attrs="{'readonly': [('state','!=','draft')]}">
<tree string="Laundry Order Lines" editable="bottom" decoration-info="state == 'draft'"
colors="grey:state == 'done';black:state == 'extra_work';green:state == 'wash';">
<field name="product_id"/>
<field name="description"/>
<field name="qty"/>
<field name="washing_type"/>
<field name="extra_work" widget="many2many_tags"/>
<field name="state"/>
<field name="amount"/>
</tree>
</field>
<group class="oe_subtotal_footer oe_right" colspan="2" name="laundry_total">
<field name="total_amount" widget='monetary' options="{'currency_field': 'currency_id'}"/>
</group>
<field name="note" class="oe_inline" placeholder="Setup default terms and conditions in your company settings."/>
<div class="oe_clear"/>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
</record>
<record id="laundry_order_tree_view" model="ir.ui.view">
<field name="name">laundry.order.tree</field>
<field name="model">laundry.order</field>
<field name="arch" type="xml">
<tree decoration-info="state == 'draft'">
<field name="name"/>
<field name="partner_id"/>
<field name="order_date"/>
<field name="laundry_person"/>
<field name="total_amount"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="action_laundry_order" model="ir.actions.act_window">
<field name="name">Laundry Management</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">laundry.order</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a New Order.
</p>
</field>
</record>
<menuitem name="Laundry Management" id="laundry_management_menu"
/>
<menuitem id="laundry_management_sub_menu" name="Laundry Management"
parent="laundry_management_menu" sequence="1"/>
<menuitem id="laundry_management_order" name="Laundry Order"
parent="laundry_management_sub_menu"
action="action_laundry_order" sequence="1"/>
</data>
</odoo>

77
laundry_management/views/washing_view.xml

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="washing_form_view" model="ir.ui.view">
<field name="name">washing.washing.form</field>
<field name="model">washing.washing</field>
<field name="arch" type="xml">
<form string="Washing" create="false">
<header>
<button name="start_wash" class="oe_highlight" string="Start" type="object" states="draft"/>
<button name="set_to_done" class="oe_highlight" string="Set to Done" type="object" states="process"/>
<field name="state" widget="statusbar" statusbar_visible="draft,process,done"/>
</header>
<sheet>
<group>
<group>
<field name="name" readonly="1"/>
<field name="user_id"/>
</group>
<group>
<field name="washing_date" readonly="1"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description"/>
</page>
<page string="Additional Products">
<field name="product_line" attrs="{'readonly': [('state','!=','draft')]}">
<tree editable="bottom">
<field name="product_id"/>
<field name="name"/>
<field name="quantity"/>
<field name="uom_id"/>
<field name="price_unit"/>
<field name="subtotal"/>
<field name="wash_obj" invisible="1"/>
</tree>
</field>
<group class="oe_subtotal_footer oe_right" colspan="2" name="product_total">
<field name="total_amount" widget='monetary'/>
</group>
<div class="oe_clear"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="washing_tree_view" model="ir.ui.view">
<field name="name">washing.washing.tree</field>
<field name="model">washing.washing</field>
<field name="arch" type="xml">
<tree create="false" edit="false" decoration-info="state == 'draft'">
<field name="name"/>
<field name="user_id"/>
<field name="washing_date"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="action_washing" model="ir.actions.act_window">
<field name="name">Washing</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">washing.washing</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('user_id','=', uid)]</field>
</record>
<menuitem id="laundry_washing" name="Laundry Works" parent="laundry_management_sub_menu" action="action_washing" sequence="2"/>
</data>
</odoo>
Loading…
Cancel
Save