@ -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>`__ |
@ -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 |
@ -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, |
|||
} |
@ -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> |
@ -0,0 +1,10 @@ |
|||
## Module <laundry_management> |
|||
|
|||
#### 03.10.2020 |
|||
#### Version 14.0.1.0.0 |
|||
#### ADD |
|||
Initial commit for Laundry Management |
|||
|
|||
|
|||
|
|||
|
@ -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 |
@ -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 |
@ -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 |
@ -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())) |
|
@ -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> |
|||
|
|||
|
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 115 KiB |
@ -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> |
@ -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> |
@ -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> |
@ -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> |
@ -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> |
@ -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> |