Browse Source

[ADD] Inital Commit

pull/29/head
SHEREEF PT 8 years ago
parent
commit
1e3b548314
  1. 9
      fleet_rental/static/description/index.html
  2. 2
      fleet_rental/static/description/index.html~
  3. 22
      laundry_management/README.rst
  4. 24
      laundry_management/__init__.py
  5. 49
      laundry_management/__manifest__.py
  6. 7
      laundry_management/data/data.xml
  7. 23
      laundry_management/models/__init__.py
  8. 399
      laundry_management/models/laundry.py
  9. 23
      laundry_management/reports/__init__.py
  10. 98
      laundry_management/reports/laundry_report.py
  11. 19
      laundry_management/security/ir.model.access.csv
  12. 20
      laundry_management/security/laundry_security.xml
  13. BIN
      laundry_management/static/description/additional.png
  14. BIN
      laundry_management/static/description/banner.jpg
  15. BIN
      laundry_management/static/description/cybro_logo.png
  16. BIN
      laundry_management/static/description/demo_work.png
  17. BIN
      laundry_management/static/description/icon.png
  18. 222
      laundry_management/static/description/index.html
  19. 214
      laundry_management/static/description/index.html~
  20. BIN
      laundry_management/static/description/invoice.png
  21. BIN
      laundry_management/static/description/invoice1.png
  22. BIN
      laundry_management/static/description/label.png
  23. BIN
      laundry_management/static/description/laundr_work.png
  24. BIN
      laundry_management/static/description/laundry_order.png
  25. BIN
      laundry_management/static/description/laundry_report.png
  26. BIN
      laundry_management/static/description/makeover.png
  27. BIN
      laundry_management/static/description/order.png
  28. BIN
      laundry_management/static/description/washing_type.png
  29. 91
      laundry_management/views/config_view.xml
  30. 45
      laundry_management/views/laundry_label.xml
  31. 26
      laundry_management/views/laundry_report.xml
  32. 119
      laundry_management/views/laundry_view.xml
  33. 77
      laundry_management/views/washing_view.xml

9
fleet_rental/static/description/index.html

@ -198,6 +198,15 @@
</div>
</section>
<section class="oe_container">
<br/>
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a functional Documentation of this Application.?</h2>
<h3 class="oe_slogan">Give a Request Mail to:&nbsp;&nbsp;<i class="fa fa-envelope" aria-hidden="true"></i>&nbsp;&nbsp;<a href="#" style="color:blue;">odoo@cybrosys.com</a></h3>
<br/>
<br/>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">

2
fleet_rental/static/description/index.html~

@ -27,7 +27,7 @@
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32" style="text-align: center;">
This module is an application for Vehicle Rental System which helps in managing the rental of fleet/vehicle.
This module is an application for Vehicle Rental System by Cybrosys Technologies which helps in managing the rental of fleet/vehicle.
It manages fleet/vehicle property by extending the basic fleet module of Odoo.
Currently fleet module does not have any connection with accounting module. But in this module,
we integrate the module with accounting also.

22
laundry_management/README.rst

@ -0,0 +1,22 @@
Laundry Management v10
======================
This module helps you to manage laundry service.
Features
========
* Recording Laundry Order.
* Assigning Works.
* Make Invoices.
* Separate View for Works.
* Billing Facility for Extra Works.
* Label Printing for Every Order.
* Detailed Laundry Work Analysis Report.
* Access Rights From Multiple Level.
* Configuration for Washing Type.
* Configuration for Extra Works (Ironing/Patching etc..).
Credits
=======
Developer: Jesni Banu @ cybrosys, jesni@cybrosys.in
Developer: Nilmar Shereef @ cybrosys, shereef@cybrosys.in

24
laundry_management/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import models
import reports

49
laundry_management/__manifest__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Laundry Management',
'version': '10.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'],
'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.jpg'],
'license': 'LGPL-3',
'demo': [],
'installable': True,
'auto_install': False,
'application': False,
}

7
laundry_management/data/data.xml

@ -0,0 +1,7 @@
<?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>
</record>
</odoo>

23
laundry_management/models/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import laundry

399
laundry_management/models/laundry.py

@ -0,0 +1,399 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
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', 'ir.needaction_mixin']
_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.multi
@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
@api.multi
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')})
@api.multi
def create_invoice(self):
if self.sale_obj.state in ['draft', 'sent']:
self.sale_obj.action_confirm()
# self.state = 'invoice'
self.invoice_status = self.sale_obj.invoice_status
print "self.sale_obj.id", self.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'
}
@api.multi
def return_dress(self):
self.state = 'return'
@api.multi
def cancel_order(self):
self.state = 'cancel'
@api.multi
def _invoice_count(self):
wrk_ordr_ids = self.env['account.invoice'].search([('origin', '=', self.sale_obj.name)])
print len(wrk_ordr_ids)
self.invoice_count = len(wrk_ordr_ids)
@api.multi
def _work_count(self):
wrk_ordr_ids = self.env['washing.washing'].search([('laundry_obj.laundry_obj.id', '=', self.id)])
print len(wrk_ordr_ids)
self.work_count = len(wrk_ordr_ids)
@api.multi
def action_view_laundry_works(self):
work_obj = self.env['washing.washing'].search([('laundry_obj.laundry_obj.id', '=', self.id)])
work_ids = []
for each in work_obj:
work_ids.append(each.id)
view_id = self.env.ref('laundry_management.washing_form_view').id
if work_ids:
if len(work_ids) <= 1:
value = {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'washing.washing',
'view_id': view_id,
'type': 'ir.actions.act_window',
'name': _('Works'),
'res_id': work_ids and work_ids[0]
}
else:
value = {
'domain': str([('id', 'in', work_ids)]),
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'washing.washing',
'view_id': False,
'type': 'ir.actions.act_window',
'name': _('Works'),
'res_id': work_ids
}
return value
@api.multi
def action_view_invoice(self):
inv_obj = self.env['account.invoice'].search([('origin', '=', self.sale_obj.name)])
inv_ids = []
for each in inv_obj:
inv_ids.append(each.id)
view_id = self.env.ref('account.invoice_form').id
if inv_ids:
if len(inv_ids) <= 1:
value = {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'account.invoice',
'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.invoice',
'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'
@api.multi
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'
@api.multi
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.multi
@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'
@api.multi
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.action_invoice_create()
elif self.advance_payment_method == 'all':
sale_orders.action_invoice_create(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'}

23
laundry_management/reports/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import laundry_report

98
laundry_management/reports/laundry_report.py

@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Jesni Banu(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from odoo import models, fields, 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

20
laundry_management/security/laundry_security.xml

@ -0,0 +1,20 @@
<?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="implied_ids" eval="[(4, ref('base.group_user')), (4, ref('account.group_account_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'))]"/>
</record>
</data>
</odoo>

BIN
laundry_management/static/description/additional.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
laundry_management/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
laundry_management/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
laundry_management/static/description/demo_work.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
laundry_management/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

222
laundry_management/static/description/index.html

@ -0,0 +1,222 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Laundry Service Management</h2>
<h3 class="oe_slogan">Cybrosys Industrial Module Which Helps You To Manage Laundry Service</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
<h4>Features:</h4>
<div>
<span style="color:green;"> &#9745; </span> Recording Laundry Order.<br/>
<span style="color:green;"> &#9745; </span> Assigning Works.<br/>
<span style="color:green;"> &#9745; </span> Make Invoices.<br/>
<span style="color:green;"> &#9745; </span> Separate View for Works.<br/>
<span style="color:green;"> &#9745; </span> Billing Facility for Extra Works.<br/>
<span style="color:green;"> &#9745; </span> Label Printing for Every Order.<br/>
<span style="color:green;"> &#9745; </span> Detailed Laundry Work Analysis Report.<br/>
<span style="color:green;"> &#9745; </span> Access Rights From Multiple Level.<br/>
<span style="color:green;"> &#9745; </span> Configuration for Washing Type.<br/>
<span style="color:green;"> &#9745; </span> Configuration for Extra Works (Ironing/Patching etc..).<br/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32" style="text-align: center;">
This is an industrial specific module by <a href="https://www.cybrosys.com">Cybrosys Technologies</a>
for Laundry Management. It manages
the laundry process with assigning works to workers.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Recording Laundry Order</h3>
<div style="text-align: center">
<p>
<h4>Laundry Management -> Laundry Management -> Laundry Order</h4>
<p>
<span style="text-align: center;padding-left:65px;">&#9755; When you install this module, an extra menu
Laundry Management will created in main menu. You
can 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.
</span>
</div>
<div style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height: 400px;" src="laundry_order.png">
</div>
</div>
<div class="" style="text-align: center">
<div style="padding-left:65px;">
<span>&#9755; 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.</span>
</div>
<div class="oe_row oe_padded">
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="laundr_work.png">
</div>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="demo_work.png">
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Label</h3>
<div class="" style="text-align: center">
<div style="padding-left:65px;">
<span>&#9755; You can print label for each order from the print menu.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="label.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Works</h3>
<div class="" style="text-align: center">
<div class="" style="text-align: center">
<p>
<h4>Laundry Management -> Laundry Management -> Laundry Works</h4>
<p>
</div>
<div style="padding-left:65px;">
<span>&#9755; This is the Separate Laundry Works Form. Here you can see the work status of Laundry Works.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="order.png">
</div>
<div style="padding-left:65px;">
<span>&#9755; 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'.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="makeover.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Invoice</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' state.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="invoice1.png">
</div>
</div>
<div class="" style="text-align: center">
<span>&#9755;
You can see all the Invoice through the smart button "Invoices" from the Laundry Order form.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="invoice.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Configuration</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can configure washing types from the menu Laundry Management -> Configuration -> Washing Type by
specifying the name, assigned person and service charge
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="washing_type.png">
</div>
</div>
<div class="" style="text-align: center">
<span>&#9755;
You can configure additional works from the menu Laundry Management -> Configuration -> Additional Works by
specifying the name, assigned person and service charge
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="additional.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Work Analysis Report</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can also analyse your all Laundry Works from Laundry Management -> Report -> Laundry Order Analysis.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="laundry_report.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Access Rights</h3>
<div class="" style="padding-left:65px;">
<span>&#9755;Laundry Manager :- Laundry manager have all the access across the fleet rental management <br/></span>
<span>&#9755;Laundry User :- Laundry user can read, write and create the records.</span>
</div>
</div>
</section>
<section class="oe_container">
<br/>
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a functional Documentation of this Application.?</h2>
<h3 class="oe_slogan">Give a Request Mail to:&nbsp;&nbsp;<i class="fa fa-envelope" aria-hidden="true"></i>&nbsp;&nbsp;<a href="#" style="color:blue;">odoo@cybrosys.com</a></h3>
<br/>
<br/>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
<div>
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></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;padding-left: 3px;"></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;padding-left: 8px;"></i></a></td>
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></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;padding-left: 3px;"></i></a></td>
</div>
</div>
</section>

214
laundry_management/static/description/index.html~

@ -0,0 +1,214 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Laundry Service Management</h2>
<h3 class="oe_slogan">Cybrosys Industrial Module Which Helps You To Manage Laundry Service</h3>
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4>
</div>
<div class="oe_row oe_spaced" style="padding-left:65px;">
<h4>Features:</h4>
<div>
<span style="color:green;"> &#9745; </span> Recording Laundry Order.<br/>
<span style="color:green;"> &#9745; </span> Assigning Works.<br/>
<span style="color:green;"> &#9745; </span> Make Invoices.<br/>
<span style="color:green;"> &#9745; </span> Separate View for Works.<br/>
<span style="color:green;"> &#9745; </span> Billing Facility for Extra Works.<br/>
<span style="color:green;"> &#9745; </span> Label Printing for Every Order.<br/>
<span style="color:green;"> &#9745; </span> Detailed Laundry Work Analysis Report.<br/>
<span style="color:green;"> &#9745; </span> Access Rights From Multiple Level.<br/>
<span style="color:green;"> &#9745; </span> Configuration for Washing Type.<br/>
<span style="color:green;"> &#9745; </span> Configuration for Extra Works (Ironing/Patching etc..).<br/>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_picture">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32" style="text-align: center;">
This is an industrial specific module by <a href="https://www.cybrosys.com">Cybrosys Technologies</a>
for Laundry Management. It manages
the laundry process with assigning works to workers.
</p>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Recording Laundry Order</h3>
<div style="text-align: center">
<p>
<h4>Laundry Management -> Laundry Management -> Laundry Order</h4>
<p>
<span style="text-align: center;padding-left:65px;">&#9755; When you install this module, an extra menu
Laundry Management will created in main menu. You
can 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.
</span>
</div>
<div style="text-align: center">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height: 400px;" src="laundry_order.png">
</div>
</div>
<div class="" style="text-align: center">
<div style="padding-left:65px;">
<span>&#9755; 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.</span>
</div>
<div class="oe_row oe_padded">
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="laundr_work.png">
</div>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="demo_work.png">
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Label</h3>
<div class="" style="text-align: center">
<div style="padding-left:65px;">
<span>&#9755; You can print label for each order from the print menu.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="label.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Works</h3>
<div class="" style="text-align: center">
<div class="" style="text-align: center">
<p>
<h4>Laundry Management -> Laundry Management -> Laundry Works</h4>
<p>
</div>
<div style="padding-left:65px;">
<span>&#9755; This is the Separate Laundry Works Form. Here you can see the work status of Laundry Works.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="order.png">
</div>
<div style="padding-left:65px;">
<span>&#9755; 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'.</span>
</div>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;" src="makeover.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Invoice</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' state.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="invoice1.png">
</div>
</div>
<div class="" style="text-align: center">
<span>&#9755;
You can see all the Invoice through the smart button "Invoices" from the Laundry Order form.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="invoice.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Configuration</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can configure washing types from the menu Laundry Management -> Configuration -> Washing Type by
specifying the name, assigned person and service charge
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="washing_type.png">
</div>
</div>
<div class="" style="text-align: center">
<span>&#9755;
You can configure additional works from the menu Laundry Management -> Configuration -> Additional Works by
specifying the name, assigned person and service charge
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="additional.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Laundry Work Analysis Report</h3>
<div class="" style="text-align: center">
<span>&#9755;
You can also analyse your all Laundry Works from Laundry Management -> Report -> Laundry Order Analysis.
</span>
<div class="oe_demo oe_picture oe_screenshot">
<img style="border:10px solid white;height:400px;" src="laundry_report.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Access Rights</h3>
<div class="" style="padding-left:65px;">
<span>&#9755;Laundry Manager :- Laundry manager have all the access across the fleet rental management <br/></span>
<span>&#9755;Laundry User :- Laundry user can read, write and create the records.</span>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<div>
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<br>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
<div>
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></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;padding-left: 3px;"></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;padding-left: 8px;"></i></a></td>
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></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;padding-left: 3px;"></i></a></td>
</div>
</div>
</section>

BIN
laundry_management/static/description/invoice.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
laundry_management/static/description/invoice1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
laundry_management/static/description/label.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
laundry_management/static/description/laundr_work.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
laundry_management/static/description/laundry_order.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
laundry_management/static/description/laundry_report.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
laundry_management/static/description/makeover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

BIN
laundry_management/static/description/order.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
laundry_management/static/description/washing_type.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

91
laundry_management/views/config_view.xml

@ -0,0 +1,91 @@
<?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_type">form</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_type">form</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>

45
laundry_management/views/laundry_label.xml

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<template id="laundry_order_label">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="obj">
<t t-call="report.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>

26
laundry_management/views/laundry_report.xml

@ -0,0 +1,26 @@
<?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_type">form</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>

119
laundry_management/views/laundry_view.xml

@ -0,0 +1,119 @@
<?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" string="Confirm Order" type="object" states="draft"/>
<button name="create_invoice" string="Create Invoice" type="object"
attrs="{'invisible': ['|',('invoice_status', '=', 'invoiced'), ('state', '!=', 'done')]}"/>
<button name="return_dress" string="Return" 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_right oe_button_box" style="width: 300px;" 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" domain="[('customer','=',True)]"
context="{'search_default_customer':1, 'show_address': 1}"
options='{"always_reload": True}'
attrs="{'readonly': [('state','!=','draft')]}"/>
<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'" colors="grey:state == 'cancel';black:state == 'return';green:state == 'process';">
<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_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('laundry_person','=', uid)]</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" icon="fa-car"/>
<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" string="Start" type="object" states="draft"/>
<button name="set_to_done" 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'"
colors="grey:state == 'cancel';black:state == 'done';green:state == 'process';">
<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_type">form</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