+By far the most beautiful and full featured menu .Autohide leftbar allows you to have abetter way to manage and control modules views with larger space.
+this module minimize the navigation menu to give you lrager working space also it expnds to it's original size whenever you hover it to show the full menu items
+
+ Select discount account for sale order discount.
+
+
+
+
+
+
+
+
+
+ account settings
+ account.config.settings
+
+
+
+
+
+
+
+
+
+
+
+ Configure Discount Accounting
+ ir.actions.act_window
+ discount.account_config
+
+ form
+ form
+ new
+
+
+
+
+ 3
+ automatic
+
+
+
\ No newline at end of file
diff --git a/end_services_benfits/READ ME b/end_services_benfits/READ ME
new file mode 100644
index 0000000..becf4e0
--- /dev/null
+++ b/end_services_benfits/READ ME
@@ -0,0 +1,15 @@
+ 'name': "End Services Benfits",
+
+ 'summary':
+ calculation of end of services benefits""",
+
+ 'description':
+ if the contract of employee ended this module Add end of services benefits notebook to employee payslip after account information
+ it take name of employee,start date of contract&end date of contract
+ it calculate the end service benefits depend on worked years:-
+ 1.if worked years between 1&5 years end benefits=(contract wage/2) *worked years
+ 2.if worked years more than 5 years end benefits=((contract wage/2) *5)+(contract wage*worked years)
+
+
+ 'author': "Dvit",
+ 'website': "http://www.Dvit.com",
diff --git a/end_services_benfits/__init__.py b/end_services_benfits/__init__.py
new file mode 100644
index 0000000..0f7cb6b
--- /dev/null
+++ b/end_services_benfits/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models
\ No newline at end of file
diff --git a/end_services_benfits/__openerp__.py b/end_services_benfits/__openerp__.py
new file mode 100644
index 0000000..d6febf8
--- /dev/null
+++ b/end_services_benfits/__openerp__.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "End Services Benfits",
+
+ 'summary': """
+ calculation of end of services benefits""",
+
+ 'description': """
+ """,
+
+ 'author': "Dvit",
+ 'website': "https://www.dvit.me",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'Human Resources',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['base', 'hr_payroll', 'hr', 'hr_contract', ],
+
+ # always loaded
+ 'data': [
+ # 'security/ir.model.access.csv',
+ 'templates.xml','salary_rul.xml',
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+ 'demo.xml',
+ ],
+}
\ No newline at end of file
diff --git a/end_services_benfits/controllers.py b/end_services_benfits/controllers.py
new file mode 100644
index 0000000..d9acd9e
--- /dev/null
+++ b/end_services_benfits/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from openerp import http
+
+# class EndServicesBenfits(http.Controller):
+# @http.route('/end_services_benfits/end_services_benfits/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/end_services_benfits/end_services_benfits/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('end_services_benfits.listing', {
+# 'root': '/end_services_benfits/end_services_benfits',
+# 'objects': http.request.env['end_services_benfits.end_services_benfits'].search([]),
+# })
+
+# @http.route('/end_services_benfits/end_services_benfits/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('end_services_benfits.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/end_services_benfits/demo.xml b/end_services_benfits/demo.xml
new file mode 100644
index 0000000..c7b70c2
--- /dev/null
+++ b/end_services_benfits/demo.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/end_services_benfits/models.py b/end_services_benfits/models.py
new file mode 100644
index 0000000..4f42a8f
--- /dev/null
+++ b/end_services_benfits/models.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+from datetime import datetime
+from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as OE_DFORMAT
+
+class end_services_benfits(models.Model):
+ _name = 'hr.payslip'
+ _inherit = 'hr.payslip', 'hr.contract'
+
+ employee_id = fields.Many2one('hr.employee', string="Employee", required=True)
+ from_date = fields.Datetime(srting="From Date", required=False)
+ to_date = fields.Datetime(srting="To Date", required=False)
+ work_years = fields.Integer(String='Work Years',readonly=True,compute ='_compute_working')
+
+ @api.one
+ def _compute_working(self):
+ from_date = False
+ if self.from_date:
+
+ from_date = datetime.strptime(self.from_date, '%Y-%m-%d %H:%M:%S')
+ dToday = datetime.now().date()
+ self.work_years = dToday.year - from_date.year
+ return self.work_years
+
+
diff --git a/end_services_benfits/salary_rul.xml b/end_services_benfits/salary_rul.xml
new file mode 100644
index 0000000..240542a
--- /dev/null
+++ b/end_services_benfits/salary_rul.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ End Services Benefits
+
+ ESB
+
+ python
+
+ code
+ result = payslip.work_years > 5 and (contract.wage * (payslip.work_years - 5) + contract.wage * .5 * 5) or ( contract.wage * .5 * payslip.work_years )
+
+
+
+
\ No newline at end of file
diff --git a/end_services_benfits/security/ir.model.access.csv b/end_services_benfits/security/ir.model.access.csv
new file mode 100644
index 0000000..a9ae49a
--- /dev/null
+++ b/end_services_benfits/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_end_services_benfits_end_services_benfits,end_services_benfits.end_services_benfits,model_end_services_benfits_end_services_benfits,,1,0,0,0
\ No newline at end of file
diff --git a/end_services_benfits/static/description/icon.png b/end_services_benfits/static/description/icon.png
new file mode 100644
index 0000000..a07dc1b
Binary files /dev/null and b/end_services_benfits/static/description/icon.png differ
diff --git a/end_services_benfits/static/description/index.html b/end_services_benfits/static/description/index.html
new file mode 100644
index 0000000..fe4036d
--- /dev/null
+++ b/end_services_benfits/static/description/index.html
@@ -0,0 +1,73 @@
+
+
+
End of contract Benfits
+
+
+
+
+
+ If the contract of employee ended itadd end of services benefits to employee payslip
+ it calculate the end service benefits depend on worked years:-
+
+
if worked years between 1&5 years end benefits=(contract wage/2) *worked years
+
if worked years more than 5 years end benefits=((contract wage/2) *5)+(contract wage*worked years)
+This module creates the increasing policy to be applied on employee payslip , the module contains one salary rules to be added to the salary structer in order to take effect on the payslip.
+ (1) module creates new field on employee contract
+ -Human Resources--> Contracts --> Increase percent
+ (2) module adds the following salary rule to be added on salary structure
+
\ No newline at end of file
diff --git a/hr_annual_increase/static/description/logo_new_00.png b/hr_annual_increase/static/description/logo_new_00.png
new file mode 100644
index 0000000..d046f74
Binary files /dev/null and b/hr_annual_increase/static/description/logo_new_00.png differ
diff --git a/hr_annual_increase/templates.xml b/hr_annual_increase/templates.xml
new file mode 100644
index 0000000..e51198d
--- /dev/null
+++ b/hr_annual_increase/templates.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ hr.years.view.form
+ hr.contract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/insurance/__init__.py b/insurance/__init__.py
new file mode 100644
index 0000000..268881c
--- /dev/null
+++ b/insurance/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+import models
+
diff --git a/insurance/__openerp__.py b/insurance/__openerp__.py
new file mode 100644
index 0000000..7abab9d
--- /dev/null
+++ b/insurance/__openerp__.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Insurance",
+
+ 'summary': """
+ Create Insurance & Medical insurance over employee contract """,
+
+ 'description': """
+ """,
+
+ 'author': "Dvit",
+ 'website': "http://www.Dvit.com",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'contract/insurance',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['hr','hr_contract','hr_payroll' ,'account'],
+
+ # always loaded
+ 'data': [
+ # 'security/ir.model.access.csv',
+ 'templates.xml',
+ 'payroll_hr.xml',
+ ],
+ # only loaded in demonstration mode
+
+}
\ No newline at end of file
diff --git a/insurance/controllers.py b/insurance/controllers.py
new file mode 100644
index 0000000..16aa4f2
--- /dev/null
+++ b/insurance/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from openerp import http
+
+# class Insurance(http.Controller):
+# @http.route('/insurance/insurance/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/insurance/insurance/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('insurance.listing', {
+# 'root': '/insurance/insurance',
+# 'objects': http.request.env['insurance.insurance'].search([]),
+# })
+
+# @http.route('/insurance/insurance/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('insurance.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/insurance/demo.xml b/insurance/demo.xml
new file mode 100644
index 0000000..5650199
--- /dev/null
+++ b/insurance/demo.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/insurance/description/contract_insurance.jpg b/insurance/description/contract_insurance.jpg
new file mode 100644
index 0000000..7f94feb
Binary files /dev/null and b/insurance/description/contract_insurance.jpg differ
diff --git a/insurance/description/icon.png b/insurance/description/icon.png
new file mode 100644
index 0000000..a07dc1b
Binary files /dev/null and b/insurance/description/icon.png differ
diff --git a/insurance/description/index.html b/insurance/description/index.html
new file mode 100644
index 0000000..4a04b69
--- /dev/null
+++ b/insurance/description/index.html
@@ -0,0 +1,71 @@
+
+
+
Insurance
+
Contract Insurance & Medical Insurance
+
+
+
+
+This module creates the insurance policy to be applied on a contract including medical insurance, the module contains two salary rules to be added to the salary structer in order to take effect on the payslip.
+ (1) module creates two new tabs on employee contract
+ -Human Resources--> Contracts --> Insurance & Medical insurance
+ (2) module adds the foloowing salary rules to be added on salary structure
+
+
\ No newline at end of file
diff --git a/insurance/description/logo_new_00.png b/insurance/description/logo_new_00.png
new file mode 100644
index 0000000..d046f74
Binary files /dev/null and b/insurance/description/logo_new_00.png differ
diff --git a/insurance/models.py b/insurance/models.py
new file mode 100644
index 0000000..1a4bed5
--- /dev/null
+++ b/insurance/models.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+
+
+class insurance(models.Model):
+ _name = 'hr.contract'
+ _inherit = 'hr.contract'
+
+
+
+ insurance_number=fields.Char(String='Insurance number')
+ insurance_company= fields.Many2one('hr.employee', "Insurance company", readonly=False)
+ insurance_amount=fields.Float("Insurance employee amount%", readonly=False)
+ insurance_percentage=fields.Float("insurance company persentage%",readonly=False)
+ insurance_medical=fields.Float("insurance medical amount",readonly=False)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/insurance/payroll_hr.xml b/insurance/payroll_hr.xml
new file mode 100644
index 0000000..2066ac0
--- /dev/null
+++ b/insurance/payroll_hr.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ insurance
+
+ INS
+
+ python
+ result=bool(contract.insurance_amount>0)
+ code
+ result = -((contract.insurance_amount)*(contract.wage)/100)
+
+
+ insurancecompany
+
+ INSC
+
+ python
+ result=bool(contract.insurance_percentage>0)
+ code
+ result = ((contract.insurance_percentage)*(contract.wage)/100)
+
+
+
+ Medical insurance
+
+ MEDIN
+
+ none
+ code
+ result = -(contract.insurance_medical/12)
+
+
+
\ No newline at end of file
diff --git a/insurance/readme.md b/insurance/readme.md
new file mode 100644
index 0000000..242be5b
--- /dev/null
+++ b/insurance/readme.md
@@ -0,0 +1,26 @@
+
+Insurance Module by DVIT.
+======
+**Welcome** to Diamond Vision odoo development repository where we share our work.
+
+## Content
+####Insurance & Medical Insurance
+This module creates the insurance policy to be applied on a contract including medical insurance, the module contains two salary rules to be added to the salary structer in order to take effect on the payslip.
+
+##New features
+#### (1) module creates two new tabs on employee contract
+ *Human Resources--> Contracts --> Insurance & Medical insurance
+####(2) module adds the foloowing salary rules to be added on salary structure
+ *insurance
+ *insurancecompany
+ *Medical insurance
+#### Preview
+![Screenshot software](https://raw.githubusercontent.com/mohamedsaad306/odoo-docs/master/insurance/static/description/contract_insurance.jpg "New Tabs ")
+
+## Contact
+#### Diamond Vision Support:
+* Homepage: www.dvit.me
+* e-mail: info@dvit.me
+* Twitter: [@dvitme](https://twitter.com/dvitme "DVIT on twitter")
+
+![Alt text](http://diamondvision.me/images/yootheme/logo_new_00.png?raw=true "DiamondVision")
diff --git a/insurance/security/ir.model.access.csv b/insurance/security/ir.model.access.csv
new file mode 100644
index 0000000..3caff74
--- /dev/null
+++ b/insurance/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_insurance_insurance,insurance.insurance,model_insurance_insurance,,1,0,0,0
\ No newline at end of file
diff --git a/insurance/static/description/Thumbs.db b/insurance/static/description/Thumbs.db
new file mode 100644
index 0000000..78ba792
Binary files /dev/null and b/insurance/static/description/Thumbs.db differ
diff --git a/insurance/static/description/contract_insurance.jpg b/insurance/static/description/contract_insurance.jpg
new file mode 100644
index 0000000..7f94feb
Binary files /dev/null and b/insurance/static/description/contract_insurance.jpg differ
diff --git a/insurance/static/description/icon.png b/insurance/static/description/icon.png
new file mode 100644
index 0000000..a07dc1b
Binary files /dev/null and b/insurance/static/description/icon.png differ
diff --git a/insurance/static/description/index.html b/insurance/static/description/index.html
new file mode 100644
index 0000000..4a04b69
--- /dev/null
+++ b/insurance/static/description/index.html
@@ -0,0 +1,71 @@
+
+
+
Insurance
+
Contract Insurance & Medical Insurance
+
+
+
+
+This module creates the insurance policy to be applied on a contract including medical insurance, the module contains two salary rules to be added to the salary structer in order to take effect on the payslip.
+ (1) module creates two new tabs on employee contract
+ -Human Resources--> Contracts --> Insurance & Medical insurance
+ (2) module adds the foloowing salary rules to be added on salary structure
+
+
\ No newline at end of file
diff --git a/report_rtl/static/description/logo_new_00.png b/report_rtl/static/description/logo_new_00.png
new file mode 100644
index 0000000..d046f74
Binary files /dev/null and b/report_rtl/static/description/logo_new_00.png differ
diff --git a/report_rtl/static/description/report.JPG b/report_rtl/static/description/report.JPG
new file mode 100644
index 0000000..4770d53
Binary files /dev/null and b/report_rtl/static/description/report.JPG differ
diff --git a/report_rtl/static/src/css/bootstrap-rtl.min.css b/report_rtl/static/src/css/bootstrap-rtl.min.css
deleted file mode 100644
index 04e881e..0000000
--- a/report_rtl/static/src/css/bootstrap-rtl.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*******************************************************************************
- * bootstrap-rtl (Version 3.2.0-rc1)
- * Author: Morteza Ansarinia (http://github.com/morteza)
- * Created on: June 13,2014
- * Project: bootstrap-rtl
- * Copyright: See the file "LICENSE.md" for the full license governing this code.
- *******************************************************************************/
-
-html{direction:rtl}body{direction:rtl}.list-unstyled{padding-right:0;padding-left:none}.list-inline{padding-right:0;padding-left:none;margin-right:-5px;margin-left:0}dd{margin-right:0;margin-left:none}@media (min-width:768px){.dl-horizontal dt{float:right;clear:right;text-align:left}.dl-horizontal dd{margin-right:180px;margin-left:0}}blockquote{border-right:5px solid #eee;border-left:0}.blockquote-reverse,blockquote.pull-left{padding-left:15px;padding-right:0;border-left:5px solid #eee;border-right:0;text-align:left}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:right}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{left:100%;right:auto}.col-xs-pull-11{left:91.66666667%;right:auto}.col-xs-pull-10{left:83.33333333%;right:auto}.col-xs-pull-9{left:75%;right:auto}.col-xs-pull-8{left:66.66666667%;right:auto}.col-xs-pull-7{left:58.33333333%;right:auto}.col-xs-pull-6{left:50%;right:auto}.col-xs-pull-5{left:41.66666667%;right:auto}.col-xs-pull-4{left:33.33333333%;right:auto}.col-xs-pull-3{left:25%;right:auto}.col-xs-pull-2{left:16.66666667%;right:auto}.col-xs-pull-1{left:8.33333333%;right:auto}.col-xs-pull-0{left:auto;right:auto}.col-xs-push-12{right:100%;left:0}.col-xs-push-11{right:91.66666667%;left:0}.col-xs-push-10{right:83.33333333%;left:0}.col-xs-push-9{right:75%;left:0}.col-xs-push-8{right:66.66666667%;left:0}.col-xs-push-7{right:58.33333333%;left:0}.col-xs-push-6{right:50%;left:0}.col-xs-push-5{right:41.66666667%;left:0}.col-xs-push-4{right:33.33333333%;left:0}.col-xs-push-3{right:25%;left:0}.col-xs-push-2{right:16.66666667%;left:0}.col-xs-push-1{right:8.33333333%;left:0}.col-xs-push-0{right:auto;left:0}.col-xs-offset-12{margin-right:100%;margin-left:0}.col-xs-offset-11{margin-right:91.66666667%;margin-left:0}.col-xs-offset-10{margin-right:83.33333333%;margin-left:0}.col-xs-offset-9{margin-right:75%;margin-left:0}.col-xs-offset-8{margin-right:66.66666667%;margin-left:0}.col-xs-offset-7{margin-right:58.33333333%;margin-left:0}.col-xs-offset-6{margin-right:50%;margin-left:0}.col-xs-offset-5{margin-right:41.66666667%;margin-left:0}.col-xs-offset-4{margin-right:33.33333333%;margin-left:0}.col-xs-offset-3{margin-right:25%;margin-left:0}.col-xs-offset-2{margin-right:16.66666667%;margin-left:0}.col-xs-offset-1{margin-right:8.33333333%;margin-left:0}.col-xs-offset-0{margin-right:0;margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:right}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{left:100%;right:auto}.col-sm-pull-11{left:91.66666667%;right:auto}.col-sm-pull-10{left:83.33333333%;right:auto}.col-sm-pull-9{left:75%;right:auto}.col-sm-pull-8{left:66.66666667%;right:auto}.col-sm-pull-7{left:58.33333333%;right:auto}.col-sm-pull-6{left:50%;right:auto}.col-sm-pull-5{left:41.66666667%;right:auto}.col-sm-pull-4{left:33.33333333%;right:auto}.col-sm-pull-3{left:25%;right:auto}.col-sm-pull-2{left:16.66666667%;right:auto}.col-sm-pull-1{left:8.33333333%;right:auto}.col-sm-pull-0{left:auto;right:auto}.col-sm-push-12{right:100%;left:0}.col-sm-push-11{right:91.66666667%;left:0}.col-sm-push-10{right:83.33333333%;left:0}.col-sm-push-9{right:75%;left:0}.col-sm-push-8{right:66.66666667%;left:0}.col-sm-push-7{right:58.33333333%;left:0}.col-sm-push-6{right:50%;left:0}.col-sm-push-5{right:41.66666667%;left:0}.col-sm-push-4{right:33.33333333%;left:0}.col-sm-push-3{right:25%;left:0}.col-sm-push-2{right:16.66666667%;left:0}.col-sm-push-1{right:8.33333333%;left:0}.col-sm-push-0{right:auto;left:0}.col-sm-offset-12{margin-right:100%;margin-left:0}.col-sm-offset-11{margin-right:91.66666667%;margin-left:0}.col-sm-offset-10{margin-right:83.33333333%;margin-left:0}.col-sm-offset-9{margin-right:75%;margin-left:0}.col-sm-offset-8{margin-right:66.66666667%;margin-left:0}.col-sm-offset-7{margin-right:58.33333333%;margin-left:0}.col-sm-offset-6{margin-right:50%;margin-left:0}.col-sm-offset-5{margin-right:41.66666667%;margin-left:0}.col-sm-offset-4{margin-right:33.33333333%;margin-left:0}.col-sm-offset-3{margin-right:25%;margin-left:0}.col-sm-offset-2{margin-right:16.66666667%;margin-left:0}.col-sm-offset-1{margin-right:8.33333333%;margin-left:0}.col-sm-offset-0{margin-right:0;margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:right}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{left:100%;right:auto}.col-md-pull-11{left:91.66666667%;right:auto}.col-md-pull-10{left:83.33333333%;right:auto}.col-md-pull-9{left:75%;right:auto}.col-md-pull-8{left:66.66666667%;right:auto}.col-md-pull-7{left:58.33333333%;right:auto}.col-md-pull-6{left:50%;right:auto}.col-md-pull-5{left:41.66666667%;right:auto}.col-md-pull-4{left:33.33333333%;right:auto}.col-md-pull-3{left:25%;right:auto}.col-md-pull-2{left:16.66666667%;right:auto}.col-md-pull-1{left:8.33333333%;right:auto}.col-md-pull-0{left:auto;right:auto}.col-md-push-12{right:100%;left:0}.col-md-push-11{right:91.66666667%;left:0}.col-md-push-10{right:83.33333333%;left:0}.col-md-push-9{right:75%;left:0}.col-md-push-8{right:66.66666667%;left:0}.col-md-push-7{right:58.33333333%;left:0}.col-md-push-6{right:50%;left:0}.col-md-push-5{right:41.66666667%;left:0}.col-md-push-4{right:33.33333333%;left:0}.col-md-push-3{right:25%;left:0}.col-md-push-2{right:16.66666667%;left:0}.col-md-push-1{right:8.33333333%;left:0}.col-md-push-0{right:auto;left:0}.col-md-offset-12{margin-right:100%;margin-left:0}.col-md-offset-11{margin-right:91.66666667%;margin-left:0}.col-md-offset-10{margin-right:83.33333333%;margin-left:0}.col-md-offset-9{margin-right:75%;margin-left:0}.col-md-offset-8{margin-right:66.66666667%;margin-left:0}.col-md-offset-7{margin-right:58.33333333%;margin-left:0}.col-md-offset-6{margin-right:50%;margin-left:0}.col-md-offset-5{margin-right:41.66666667%;margin-left:0}.col-md-offset-4{margin-right:33.33333333%;margin-left:0}.col-md-offset-3{margin-right:25%;margin-left:0}.col-md-offset-2{margin-right:16.66666667%;margin-left:0}.col-md-offset-1{margin-right:8.33333333%;margin-left:0}.col-md-offset-0{margin-right:0;margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:right}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{left:100%;right:auto}.col-lg-pull-11{left:91.66666667%;right:auto}.col-lg-pull-10{left:83.33333333%;right:auto}.col-lg-pull-9{left:75%;right:auto}.col-lg-pull-8{left:66.66666667%;right:auto}.col-lg-pull-7{left:58.33333333%;right:auto}.col-lg-pull-6{left:50%;right:auto}.col-lg-pull-5{left:41.66666667%;right:auto}.col-lg-pull-4{left:33.33333333%;right:auto}.col-lg-pull-3{left:25%;right:auto}.col-lg-pull-2{left:16.66666667%;right:auto}.col-lg-pull-1{left:8.33333333%;right:auto}.col-lg-pull-0{left:auto;right:auto}.col-lg-push-12{right:100%;left:0}.col-lg-push-11{right:91.66666667%;left:0}.col-lg-push-10{right:83.33333333%;left:0}.col-lg-push-9{right:75%;left:0}.col-lg-push-8{right:66.66666667%;left:0}.col-lg-push-7{right:58.33333333%;left:0}.col-lg-push-6{right:50%;left:0}.col-lg-push-5{right:41.66666667%;left:0}.col-lg-push-4{right:33.33333333%;left:0}.col-lg-push-3{right:25%;left:0}.col-lg-push-2{right:16.66666667%;left:0}.col-lg-push-1{right:8.33333333%;left:0}.col-lg-push-0{right:auto;left:0}.col-lg-offset-12{margin-right:100%;margin-left:0}.col-lg-offset-11{margin-right:91.66666667%;margin-left:0}.col-lg-offset-10{margin-right:83.33333333%;margin-left:0}.col-lg-offset-9{margin-right:75%;margin-left:0}.col-lg-offset-8{margin-right:66.66666667%;margin-left:0}.col-lg-offset-7{margin-right:58.33333333%;margin-left:0}.col-lg-offset-6{margin-right:50%;margin-left:0}.col-lg-offset-5{margin-right:41.66666667%;margin-left:0}.col-lg-offset-4{margin-right:33.33333333%;margin-left:0}.col-lg-offset-3{margin-right:25%;margin-left:0}.col-lg-offset-2{margin-right:16.66666667%;margin-left:0}.col-lg-offset-1{margin-right:8.33333333%;margin-left:0}.col-lg-offset-0{margin-right:0;margin-left:0}}th{text-align:right}@media screen and (max-width:767px){.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-right:0;border-left:auto}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-left:0;border-right:auto}}.radio label,.checkbox label{padding-right:20px;padding-left:auto}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:right;margin-right:20px;margin-left:0}.radio-inline,.checkbox-inline{padding-right:20px;padding-left:0}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-right:10px;margin-left:0}.has-feedback .form-control{padding-left:42.5px;padding-right:auto}.form-control-feedback{left:0;right:auto}@media (min-width:768px){.form-inline .radio,.form-inline .checkbox{padding-right:0;padding-left:auto}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{margin-right:0;margin-left:auto}}@media (min-width:768px){.form-horizontal .control-label{text-align:left}}.form-horizontal .has-feedback .form-control-feedback{left:15px;right:auto}.caret{margin-right:2px;margin-left:0}.dropdown-menu{right:0;left:auto;float:left;text-align:right}.dropdown-menu.pull-left{left:0;float:right;right:auto}.pull-left>.dropdown-menu{left:0;float:right;right:auto}.navbar-nav.pull-left>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-left{right:auto;left:0}.btn-group>.btn,.btn-group-vertical>.btn{float:right}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-right:-1px;margin-left:0}.btn-toolbar{margin-right:-5px;margin-left:0}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:right}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-right:5px;margin-left:0}.btn-group>.btn:first-child{margin-right:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group{float:right}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.btn .caret{margin-right:0}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-right:0}.input-group .form-control{float:right}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:first-child{border-right:1px solid #ccc;border-left:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:last-child{border-left:1px solid #ccc;border-right:0}.input-group-btn>.btn+.btn{margin-right:-1px;margin-left:auto}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-left:-1px;margin-right:auto}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-right:-1px;margin-left:auto}.nav{padding-right:0;padding-left:auto}.nav-tabs>li{float:right}.nav-tabs>li>a{margin-left:auto;margin-right:-2px;border-radius:4px 4px 0 0}.nav-pills>li{float:right}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-right:2px;margin-left:auto}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-right:0;margin-left:auto}.nav-justified>.dropdown .dropdown-menu{right:auto}.nav-tabs-justified>li>a{margin-left:0;margin-right:auto}@media (min-width:768px){.nav-tabs-justified>li>a{border-radius:4px 4px 0 0}}@media (min-width:768px){.navbar-header{float:right}}.navbar-collapse{padding-right:15px;padding-left:15px}.navbar-brand{float:right}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-right:-15px;margin-left:auto}}.navbar-toggle{float:left;margin-left:15px;margin-right:auto}@media (max-width:767px){.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 25px 5px 15px}}@media (min-width:768px){.navbar-nav{float:right}.navbar-nav>li{float:right}.navbar-nav.navbar-right:last-child{margin-left:-15px;margin-right:auto}.navbar-nav.navbar-right.flip{float:left!important}.navbar-nav.navbar-right .dropdown-menu{left:0;right:auto}}@media (min-width:768px){.navbar-text{float:right}.navbar-text.navbar-right:last-child{margin-left:0;margin-right:auto}}.pagination{padding-right:0}.pagination>li>a,.pagination>li>span{float:right;margin-right:-1px;margin-left:0}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{margin-right:-1px;border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.pager{padding-right:0;padding-left:none}.pager .next>a,.pager .next>span{float:left}.pager .previous>a,.pager .previous>span{float:right}.nav-pills>li>a>.badge{margin-left:0;margin-right:3px}.alert-dismissable{padding-left:35px;padding-right:15px}.alert-dismissable .close{top:-2px;right:0;left:21}.progress-bar{float:right}.media,.media-body{overflow:hidden;zoom:1}.media>.pull-left{margin-right:10px}.media>.pull-left.flip{margin-right:0;margin-left:10px}.media>.pull-right{margin-left:10px}.media>.pull-right.flip{margin-left:0;margin-right:10px}.media-list{padding-right:0;padding-left:auto;list-style:none}.list-group{padding-right:0;padding-left:none}.list-group-item>.badge{float:left}.list-group-item>.badge+.badge{margin-ight:5px;margin-left:0}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-right-radius:3px;border-top-left-radius:0}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-left-radius:3px;border-top-right-radius:0}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px;border-top-right-radius:0}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px;border-top-left-radius:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-right:0;border-left:none}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:none;border-left:0}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{right:0;left:none}.close{float:left}.modal-footer{text-align:left}.modal-footer .btn+.btn{margin-left:0;margin-right:5px}.modal-footer .btn-group .btn+.btn{margin-right:-1px;margin-left:0}.modal-footer .btn-block+.btn-block{margin-right:0;margin-left:none}.popover{right:0;left:none;text-align:right}.popover.top>.arrow{right:50%;left:none;margin-right:-11px;margin-left:0}.popover.top>.arrow:after{margin-right:-10px;margin-left:0}.carousel-inner>.item{-webkit-transition:.6s ease-in-out right;-o-transition:.6s ease-in-out right;transition:.6s ease-in-out right}.carousel-inner>.active{right:0}.carousel-inner>.next{right:100%;left:0}.carousel-inner>.prev{right:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{right:0}.carousel-inner>.active.right{left:-100%}.carousel-inner>.active.left{right:100%}.carousel-control{right:0;bottom:0}.carousel-control.left{right:auto;left:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5)0),color-stop(rgba(0,0,0,.0001)100%));background-image:-o-linear-gradient(left,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-image:linear-gradient(to right,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001)0),color-stop(rgba(0,0,0,.5)100%));background-image:-o-linear-gradient(left,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;right:auto;margin-right:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;left:auto;margin-left:-10px}.carousel-indicators{right:50%;left:0;margin-right:-30%;margin-left:0;padding-left:0}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:0;margin-right:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-left:0;margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}}.pull-right.flip{float:left!important}.pull-left.flip{float:right!important}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}
\ No newline at end of file
diff --git a/report_rtl/static/src/css/rtl.css b/report_rtl/static/src/css/rtl.css
deleted file mode 100644
index a9470ba..0000000
--- a/report_rtl/static/src/css/rtl.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.text-right{
- text-align: left !important;
-}
\ No newline at end of file
diff --git a/report_rtl/views/layout.xml b/report_rtl/views/layout.xml
index cecf001..96d917b 100644
--- a/report_rtl/views/layout.xml
+++ b/report_rtl/views/layout.xml
@@ -2,49 +2,11 @@
-
- .container{
- direction: rtl !important;
- text-align: rtl;
- }
- .pull-right{
- float: left !important;
- }
- .header .text-right{
- float: left !important;
- text-align: left !important;
- }
- .footer .text-right{
- float: left !important;
- text-align: left !important;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 'container ' + lang_direction
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/report_rtl_website/README.md b/report_rtl_website/README.md
new file mode 100644
index 0000000..fc31a72
--- /dev/null
+++ b/report_rtl_website/README.md
@@ -0,0 +1,6 @@
+dvit-odoo8 modules
+==================
+
+Install only if you have website installed and want to fix RTL report printing.
+
+For support, Plz contact us: http://dvit.me/
\ No newline at end of file
diff --git a/report_rtl_website/__init__.py b/report_rtl_website/__init__.py
new file mode 100644
index 0000000..a3f6e10
--- /dev/null
+++ b/report_rtl_website/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+#import models
\ No newline at end of file
diff --git a/report_rtl_website/__openerp__.py b/report_rtl_website/__openerp__.py
new file mode 100644
index 0000000..6d64b42
--- /dev/null
+++ b/report_rtl_website/__openerp__.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+
+{
+ 'name': 'Report RTL - fix for website',
+ 'version': '8.0.2.0',
+ 'author': 'DVIT',
+ 'summary': 'Report printing in RTL direction',
+ 'description':
+ """Install only if you have website installed and want to fix RTL report printing .""",
+ 'depends': ['report','website_report','report_rtl'],
+ 'auto_install': True,
+ 'data': [
+ 'views/layout.xml',
+ ],
+}
diff --git a/report_rtl_website/views/layout.xml b/report_rtl_website/views/layout.xml
new file mode 100644
index 0000000..d4b8ea6
--- /dev/null
+++ b/report_rtl_website/views/layout.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sale_discount/README.md b/sale_discount/README.md
index 9519dc5..5dc34c8 100644
--- a/sale_discount/README.md
+++ b/sale_discount/README.md
@@ -10,3 +10,5 @@ in Order: Order Total before discount - Discount value.
This Module Depends (not techincally) on invoice_discount .
You must enable discounts on sale settings.
+
+For support, Plz contact us: http://dvit.me/
\ No newline at end of file
diff --git a/sale_discount/__openerp__.py b/sale_discount/__openerp__.py
index 0c61eb7..4f2c577 100644
--- a/sale_discount/__openerp__.py
+++ b/sale_discount/__openerp__.py
@@ -7,7 +7,7 @@
'category': 'Sales Management',
'summary': 'Show discount total and total before discount on sales orders.',
'description':"Show Discount Total and Total before Discount on Sales Orders.",
- 'author': 'M.Hagag@DVIT.ME',
+ 'author': 'DVIT.ME',
'website': 'https://www.dvit.me',
'depends': ['sale','invoice_discount'],
'data': ['discount_view.xml',
diff --git a/sale_discount/discount_view.xml b/sale_discount/discount_view.xml
index c6a4fe0..4073bc5 100644
--- a/sale_discount/discount_view.xml
+++ b/sale_discount/discount_view.xml
@@ -1,31 +1,22 @@
-
- sale.order.form
- sale.order
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ sale_discount.order.form
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/sale_discount/sale_discount.py b/sale_discount/sale_discount.py
index 4c9145d..9fcea62 100644
--- a/sale_discount/sale_discount.py
+++ b/sale_discount/sale_discount.py
@@ -64,4 +64,4 @@ def _total_line(self, cr, uid, ids, field_name, arg, context=None):
-
\ No newline at end of file
+
diff --git a/sale_discount/views/report_discount.xml b/sale_discount/views/report_discount.xml
index d383cec..44457f5 100644
--- a/sale_discount/views/report_discount.xml
+++ b/sale_discount/views/report_discount.xml
@@ -1,44 +1,36 @@
-
-
-
-
+
+
+
+
diff --git a/sale_installment_contract/__init__.py b/sale_installment_contract/__init__.py
new file mode 100644
index 0000000..9a7e03e
--- /dev/null
+++ b/sale_installment_contract/__init__.py
@@ -0,0 +1 @@
+from . import models
\ No newline at end of file
diff --git a/sale_installment_contract/__openerp__.py b/sale_installment_contract/__openerp__.py
new file mode 100644
index 0000000..9181b85
--- /dev/null
+++ b/sale_installment_contract/__openerp__.py
@@ -0,0 +1,48 @@
+{
+ 'name': 'Sale installments contract',
+ 'summary': 'sale with installment contracts',
+ 'description': """
+Sale Installment contract
+============================
+Auto create or update contract with installment information by adding
+a tab on sale order that contains these information.
+
+Usage
+--------
+1- Check the installment mode option in the SO which will activate the installment contract tab
+ -
+2- Enter the installment information as below:
+ - advance / down payment amount if any
+ - if the down payment a fixed amount check the fixed amount box
+ - enter the number of installments ( must be more than 1)
+ - enter the repeat every number ( must be more than 0 )
+ - select the repeat period ( days , weeks, monthes, years )
+ - enter the date of next installment
+3- on confirmation of the SO you will get below results:
+ - the installment anount will be auto calculated
+ - you will get a confirmed invoice of the down payment
+ - you will get a contract with recurring invoices representing installments
+ - the generated invoices from the contract will be linked to the Sale order
+ - the contract start and end dates auto calculated using the date of next installment
+ - the contract will be auto closed after reaching end date
+
+Issues/limitations & ToDos:
+---------------------------
+- limitation: only one SO linked to the contract logically supported, technically many supported but if there's more than one SO linked to the same contract the last SO will get recurring invoices linked to it which will cause accounting issues.
+ """,
+ 'version': '8.0.0.2',
+ 'category': 'Sales',
+ 'author': 'DVIT.me',
+ 'website': 'http://dvit.me',
+ 'license': 'AGPL-3',
+ 'depends': [
+ 'account_analytic_analysis',
+ 'account',
+ 'sale',
+ ],
+ 'data': ['views.xml'],
+ 'demo': [],
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/sale_installment_contract/models/__init__.py b/sale_installment_contract/models/__init__.py
new file mode 100644
index 0000000..a7bdd02
--- /dev/null
+++ b/sale_installment_contract/models/__init__.py
@@ -0,0 +1,2 @@
+from . import account_analytic_analysis
+from . import sale_order
diff --git a/sale_installment_contract/models/account_analytic_analysis.py b/sale_installment_contract/models/account_analytic_analysis.py
new file mode 100644
index 0000000..8ba7471
--- /dev/null
+++ b/sale_installment_contract/models/account_analytic_analysis.py
@@ -0,0 +1,47 @@
+from dateutil.relativedelta import relativedelta
+import datetime
+import time
+from openerp.osv import osv, fields, orm
+from openerp import models, api
+from openerp.tools.translate import _
+from logging import getLogger
+from openerp.exceptions import ValidationError
+
+_logger = getLogger(__name__)
+
+class account_analytic_account(osv.osv):
+ _inherit = "account.analytic.account"
+ _columns = {
+ 'installment_mode': fields.boolean('Installments mode', help='Link recurring invoices to sale order'),
+ 'auto_confirm_invoices': fields.boolean('Auto confirm generated invoices'),
+ }
+
+ def _recurring_create_invoice(self, cr, uid, ids, automatic=False, context=None):
+ invoice_ids = super(account_analytic_account, self)._recurring_create_invoice(cr,
+ uid, ids, automatic, context=context)
+ current_date = time.strftime('%Y-%m-%d')
+ if not ids:
+ ids = self.search(cr, uid, [
+ ('recurring_next_date', '<=', current_date),
+ ('state', '=', 'open'), ('recurring_invoices', '=', True),
+ ('type', '=', 'contract')])
+ for invoice_obj in self.pool.get('account.invoice').browse(cr, uid, invoice_ids, context=context):
+ for account in self.browse(cr, uid, ids, context=context):
+ if account.installment_mode:
+ sale_obj = self.pool.get('sale.order')
+ sale_id = sale_obj.search(cr, uid,
+ [('project_id', '=', account.id), ('state', '=', 'manual')], context=context)[0]
+ if sale_id:
+ sale = sale_obj.browse(cr, uid, sale_id, context=context)
+ # add invoice_obj only if it's related to contract of sale_obj
+ if invoice_obj.invoice_line[0] and invoice_obj.invoice_line[0].account_analytic_id == sale.project_id:
+ sale.invoice_ids += invoice_obj
+ if account.recurring_next_date > account.date and account.ca_invoiced == sale.amount_total:
+ account.set_close()
+ sale.signal_workflow('action_invoice_end')
+ sale_obj.write(cr, uid, sale_id, {'state': 'progress'}, context=context)
+ if account.auto_confirm_invoices:
+ for inv_id in invoice_ids:
+ inv = self.pool['account.invoice'].browse(cr, uid, inv_id, context=context)
+ inv.state == 'draft' and inv.signal_workflow('invoice_open')
+ return invoice_ids
diff --git a/sale_installment_contract/models/sale_order.py b/sale_installment_contract/models/sale_order.py
new file mode 100644
index 0000000..930afd4
--- /dev/null
+++ b/sale_installment_contract/models/sale_order.py
@@ -0,0 +1,170 @@
+from dateutil.relativedelta import relativedelta
+import datetime
+
+from openerp.osv import osv, fields, orm
+from openerp import models, api
+from openerp.tools.translate import _
+from logging import getLogger
+from openerp.exceptions import ValidationError
+
+_logger = getLogger(__name__)
+
+
+class sale_order(osv.osv):
+
+ _inherit = 'sale.order'
+
+ _columns = {
+ 'installment_sale': fields.boolean('Installments mode', readonly=True,
+ states={'draft': [('readonly', False)],},
+ help='Generate installments from contract linked to this order'),
+ 'down_payment_amount': fields.float('Initial/down payment amount', readonly=True,
+ states={'draft': [('readonly', False)],},
+ help='default is percentage, if fixed check the fixed amount box' ),
+ 'down_payment_fixed': fields.boolean('Fixed amount', readonly=True,
+ states={'draft': [('readonly', False)],}),
+ 'installments_count': fields.integer('Number of installments', readonly=True,
+ states={'draft': [('readonly', False)],}),
+ 'installment_amount': fields.float('Installment amount', readonly=True),
+ 'recurring_rule_type': fields.selection([
+ ('daily', 'Day(s)'),
+ ('weekly', 'Week(s)'),
+ ('monthly', 'Month(s)'),
+ ('yearly', 'Year(s)'),
+ ], 'Recurrency', readonly=True,
+ states={'draft': [('readonly', False)],},
+ help="Installments automatically repeat at specified interval"),
+ 'recurring_interval': fields.integer('Repeat Every', readonly=True,
+ states={'draft': [('readonly', False)],},
+ help="Repeat every (Days/Week/Month/Year)"),
+ 'recurring_next_date': fields.date('Date of Next Installment', readonly=True,
+ states={'draft': [('readonly', False)],}),
+ }
+
+ @api.multi
+ @api.constrains('installments_count','recurring_interval','down_payment_fixed')
+ def _check_constrains(self):
+ if self.installment_sale:
+ if self.installments_count < 3:
+ raise ValidationError("Number of Installments must be more than 2")
+ if self.recurring_interval < 1:
+ raise ValidationError("Repeat every should be 1 or more")
+ if not self.down_payment_fixed and self.down_payment_amount > 80:
+ raise ValidationError("Percent payment can not exceed 80%")
+
+ def action_button_confirm(self, cr, uid, ids, context=None):
+ super(sale_order, self).action_button_confirm(cr, uid, ids, context=context)
+ # _logger.warning('Order Ids %s', ids)
+ # we need to get the order which is linked to our contract
+ for order in self.browse(cr, uid, ids, context=context):
+ order._check_constrains()
+
+ if order.installment_sale:
+ # Calc the installment_amount
+ if order.down_payment_fixed:
+ order.installment_amount = (order.amount_total - order.down_payment_amount) / order.installments_count
+ else:
+ # if not fixed amount then
+ # installment = (total - (total *(down_payment/100))) / installments_count
+ order.installment_amount = (order.amount_total - (order.amount_total * (order.down_payment_amount / 100))) / order.installments_count
+
+ # calc contract end date
+ interval = order.recurring_interval
+ next_date = datetime.datetime.strptime(order.recurring_next_date or current_date, "%Y-%m-%d")
+ if order.recurring_rule_type == 'daily':
+ date_end = next_date+relativedelta(days=+(interval*(order.installments_count-1)))
+ elif order.recurring_rule_type == 'weekly':
+ date_end = next_date+relativedelta(weeks=+(interval*(order.installments_count-1)))
+ elif order.recurring_rule_type == 'monthly':
+ date_end = next_date+relativedelta(months=+(interval*(order.installments_count-1)))
+ else:
+ date_end = next_date+relativedelta(years=+(interval*(order.installments_count-1)))
+
+ # Contract creation values
+ vals = {
+ 'type': 'contract',
+ 'name': order.order_line[0].name + ' ' + order.partner_id.name,
+ 'code': order.order_line[0].name + ' ' + order.partner_id.name,
+ 'user_id': order.user_id.id,
+ 'partner_id': order.partner_id.id,
+ 'date_start': order.recurring_next_date,
+ 'date': date_end,
+ 'recurring_interval': order.recurring_interval,
+ 'recurring_rule_type': order.recurring_rule_type,
+ 'recurring_next_date': order.recurring_next_date,
+ 'recurring_invoices': 1,
+ 'installment_mode': 1,
+ 'auto_confirm_invoices': 1,
+ 'fix_price_invoices': 1,
+ }
+
+ # use linked contract or create new one
+ if order.project_id:
+ contract_obj = order.project_id
+ contract_id = contract_obj.id
+ contract_obj.write(vals)
+ else:
+ contract_model = self.pool['account.analytic.account']
+ contract_id = contract_model.create(cr, uid, vals, context=context)
+ contract_obj = self.pool['account.analytic.account'].browse(cr, uid, contract_id, context=context)
+ order.write({'project_id':contract_id,})
+
+ # invoice lines
+ line_ids = []
+ for line in order.order_line:
+ line_vals = {
+ 'analytic_account_id': contract_id,
+ 'product_id': line.product_id.id,
+ 'name': line.name + ' installment',
+ 'quantity': line.product_uom_qty,
+ 'uom_id': line.product_uom.id,
+ 'price_unit': order.installment_amount and order.installment_amount or 0.0,
+ }
+ inv_line = self.pool['account.analytic.invoice.line'].create(cr, uid, line_vals, context=context)
+ line_ids.append(inv_line)
+
+ if contract_id:
+ inv_lines = self.pool['account.analytic.invoice.line'].browse(cr, uid, line_ids, context=context)
+ contract_obj.recurring_invoice_line_ids += inv_lines
+
+ if order.down_payment_amount > 0 :
+ # Generate advance payment invocie
+ inv_vals = {
+ 'partner_id': order.partner_id.id ,
+ 'account_id': order.partner_invoice_id.property_account_receivable.id ,
+ 'company_id': order.company_id.id ,
+ 'currency_id': order.currency_id.id ,
+ 'journal_id': self.pool['account.invoice'].default_get(cr, uid, ['journal_id'], context=context)['journal_id'],
+ 'type': 'out_invoice',
+ }
+ # create invocie
+ inv_id = self.pool['account.invoice'].create(cr, uid, inv_vals, context=context)
+ inv_obj = self.pool['account.invoice'].browse(cr, uid, inv_id, context=context)
+ # Add invoice id to order.invoice_ids
+ order.invoice_ids += inv_obj
+
+ #calc down_payment
+ if order.down_payment_fixed:
+ down_pay = order.down_payment_amount
+ else:
+ down_pay = order.amount_total * (order.down_payment_amount / 100)
+
+ # Generate advance invoice line
+ percent_simpol = order.down_payment_fixed and '.' or ' %'
+ l_vals = {
+ 'account_analytic_id': contract_id,
+ 'name': order.partner_invoice_id.name + ' ' + order.order_line[0].name + ' Down/Advance Payment ' + str(order.down_payment_amount) + percent_simpol,
+ 'quantity': order.order_line[0].product_uom_qty,
+ 'uos_id': order.order_line[0].product_uom.id,
+ 'price_unit': down_pay and down_pay or 0.0,
+ 'invoice_id': inv_id ,
+ }
+ # create down payment invoice line
+ i_line_id = self.pool['account.invoice.line'].create(cr, uid, l_vals, context=context)
+ i_line_obj = self.pool['account.invoice.line'].browse(cr, uid, i_line_id, context=context)
+
+ # Link the invoice line and confirm the invoice
+ inv_obj.invoice_line += i_line_obj
+ inv_obj.signal_workflow('invoice_open')
+
+ return True
diff --git a/sale_installment_contract/views.xml b/sale_installment_contract/views.xml
new file mode 100644
index 0000000..bae85b4
--- /dev/null
+++ b/sale_installment_contract/views.xml
@@ -0,0 +1,47 @@
+
+
+
+
+ account.analytic.analysis.sale.invoice.form
+ account.analytic.account
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sinstallment_contract
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sale_line_noname/__init__.py b/sale_line_noname/__init__.py
new file mode 100644
index 0000000..cc9051a
--- /dev/null
+++ b/sale_line_noname/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+
+import sale
+
diff --git a/sale_line_noname/__openerp__.py b/sale_line_noname/__openerp__.py
new file mode 100644
index 0000000..d468085
--- /dev/null
+++ b/sale_line_noname/__openerp__.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ 'name': 'Sale Line no Name',
+ 'version': '8.0.1.0',
+ 'sequence': 1,
+ 'author': 'DVIT.ME',
+ 'category': 'Sales',
+ 'description': """
+Removes the name from sale order lines.
+
+For support, Plz contact us: http://dvit.me/
+""",
+ 'website': 'http://www.dvit.me',
+ 'depends': ['sale'],
+ 'data': [],
+ 'demo': [],
+ 'test': [],
+ 'installable': True,
+ 'auto_install': False,
+}
+
diff --git a/sale_line_noname/sale.py b/sale_line_noname/sale.py
new file mode 100644
index 0000000..dbb9e71
--- /dev/null
+++ b/sale_line_noname/sale.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv import osv
+
+class sale_order_line(osv.osv):
+ _inherit = "sale.order.line"
+
+ def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,uom=False, qty_uos=0,
+ uos=False, name='', partner_id=False,lang=False, update_tax=True, date_order=False,
+ packaging=False, fiscal_position=False, flag=False, context=None):
+
+ res = super(sale_order_line, self).product_id_change(cr, uid, ids, pricelist, product,
+ qty=qty, uom=uom, qty_uos=qty_uos, uos=uos, name='', partner_id=partner_id,
+ lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging,
+ fiscal_position=fiscal_position,flag=flag, context=context)
+ partner_obj = self.pool.get('res.partner').browse(cr, uid, partner_id)
+ lang = partner_obj.lang
+ context_partner = {'lang': lang, 'partner_id': partner_id}
+ product_obj = self.pool.get('product.product').browse(cr, uid, product, context=context_partner)
+ if product_obj.description_sale:
+ res['value']['name'] = product_obj.description_sale
+ return res
+
diff --git a/sale_tax_simple/__init__.py b/sale_tax_simple/__init__.py
new file mode 100755
index 0000000..0f7cb6b
--- /dev/null
+++ b/sale_tax_simple/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models
\ No newline at end of file
diff --git a/sale_tax_simple/__openerp__.py b/sale_tax_simple/__openerp__.py
new file mode 100755
index 0000000..c47dccb
--- /dev/null
+++ b/sale_tax_simple/__openerp__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': 'Simple Sale Tax',
+ 'summary': 'Simple Sale Tax modification',
+ 'description': """
+ Add a simple way to set or modify sale line taxes based on a filed.
+ """,
+ 'version': '8.0.1.0',
+ 'category': 'Sale',
+ 'author': 'DVIT.me',
+ 'website': 'http://dvit.me',
+ 'license': 'AGPL-3',
+ 'depends': [
+ 'account','sale'
+ ],
+ 'data': ['templates.xml'],
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+
+}
diff --git a/sale_tax_simple/models.py b/sale_tax_simple/models.py
new file mode 100755
index 0000000..1fa2d46
--- /dev/null
+++ b/sale_tax_simple/models.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+class SaleOrder(models.Model):
+ _inherit = 'sale.order'
+
+ tax_ids = fields.Many2many(
+ 'account.tax',
+ string='Taxes',
+ help='Note: this will be put on all Order Lines below.',
+ states={'draft': [('readonly', False)]},
+ domain=['|', ('active', '=', False), ('active', '=', True)]
+ )
+
+ @api.onchange("tax_ids")
+ def onchange_tax_ids(self):
+ for o in self.order_line:
+ o.tax_id = self.tax_ids
+
+
+class AccountInvoice(models.Model):
+ _inherit = 'account.invoice'
+
+ tax_ids = fields.Many2many(
+ 'account.tax',
+ string='Taxes',
+ help='Note: this will be put on all Invoice Lines below.',
+ states={'draft': [('readonly', False)]},
+ domain=[('parent_id', '=', False), '|', ('active', '=', False), ('active', '=', True)]
+ )
+
+ @api.onchange("tax_ids", "invoice_line")
+ def onchange_tax_ids(self):
+ for o in self.invoice_line:
+ o.invoice_line_tax_id = self.tax_ids
\ No newline at end of file
diff --git a/sale_tax_simple/templates.xml b/sale_tax_simple/templates.xml
new file mode 100755
index 0000000..0fd370e
--- /dev/null
+++ b/sale_tax_simple/templates.xml
@@ -0,0 +1,35 @@
+
+
+
+ sale.view_order_form_so_tax
+ sale.order
+
+
+
+
+
+
+
+
+
+
+ account.invoice_form_so_tax
+ account.invoice
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sale_team_journal/__init__.py b/sale_team_journal/__init__.py
new file mode 100755
index 0000000..a5e7e1d
--- /dev/null
+++ b/sale_team_journal/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+import models
\ No newline at end of file
diff --git a/sale_team_journal/__openerp__.py b/sale_team_journal/__openerp__.py
new file mode 100755
index 0000000..ed70396
--- /dev/null
+++ b/sale_team_journal/__openerp__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+{
+'name': 'Sale Team Journal',
+'summary': 'Sale Team Journal',
+'description': """
+Sale journal per team and user, to allow reporting sales per team, department and per user.
+""",
+'version': '8.0.1.0',
+'category': 'Sales',
+'author': 'DVIT.me',
+'website': 'http://dvit.me',
+'license': 'AGPL-3',
+'depends': ['sale'],
+'data': ['templates.xml',],
+'installable': True,
+'application': False,
+'auto_install': True,
+
+}
\ No newline at end of file
diff --git a/sale_team_journal/models.py b/sale_team_journal/models.py
new file mode 100755
index 0000000..88c5c11
--- /dev/null
+++ b/sale_team_journal/models.py
@@ -0,0 +1,34 @@
+
+
+from openerp import models, fields, api
+
+
+class CRMCaseSection(models.Model):
+ _inherit = "crm.case.section"
+ journal_id = fields.Many2one('account.journal', 'Sale Journal', domain = [('type', '=', 'sale')], help='Note: when you set a sale journal to a sale user it overwrites this field, the priority is for user and then the team' )
+
+class ResUsers(models.Model):
+ _inherit = "res.users"
+ journal_id = fields.Many2one('account.journal', 'Sale Journal', domain = [('type', '=', 'sale')])
+
+class SaleOrder(models.Model):
+ _inherit = "sale.order"
+
+ def _prepare_invoice(self, cr, uid, order, lines, context=None):
+ vals = super(SaleOrder, self)._prepare_invoice(
+ cr, uid, order, lines, context=context)
+
+ for o in order:
+ # get the 1st sale journal by ID instead the default function gets 1st by name
+ journal_id = self.pool['account.journal'].search(cr, uid,[
+ ('type','=','sale'),('company_id','=',order.company_id.id)],
+ limit=1, order='id asc')
+ # set the 1st most sale journal by default
+ vals['journal_id'] = journal_id[0]
+ if o.user_id.journal_id.id:
+ vals['journal_id'] = o.user_id.journal_id.id
+ elif o.section_id.journal_id.id:
+ vals['journal_id'] = o.section_id.journal_id.id
+ elif o.user_id.default_section_id.journal_id:
+ vals['journal_id'] = o.user_id.default_section_id.journal_id.id
+ return vals
\ No newline at end of file
diff --git a/sale_team_journal/templates.xml b/sale_team_journal/templates.xml
new file mode 100755
index 0000000..6ac0b7a
--- /dev/null
+++ b/sale_team_journal/templates.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+ sales_team.crm_case_section_view_form_inherit_sale_team_journal
+ crm.case.section
+
+ form
+
+
+
+
+
+
+
+ base.view_users_form_inherit_sale_team_journal
+ res.users
+
+ form
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/show_sendby_email/README b/show_sendby_email/README
new file mode 100644
index 0000000..e69de29
diff --git a/web-lang/__init__.py b/show_sendby_email/__init__.py
similarity index 76%
rename from web-lang/__init__.py
rename to show_sendby_email/__init__.py
index 0c5de3a..c7a6ca6 100644
--- a/web-lang/__init__.py
+++ b/show_sendby_email/__init__.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
-
import controllers
+import models
\ No newline at end of file
diff --git a/show_sendby_email/__openerp__.py b/show_sendby_email/__openerp__.py
new file mode 100644
index 0000000..85bf0c7
--- /dev/null
+++ b/show_sendby_email/__openerp__.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "show_sendby_email",
+
+ 'summary': """
+ always show send email buttons in invoices """,
+
+ 'description': """
+ This module makes the ( print & Send by email ) buttons avilabe even after registering an invoice payment .
+ """,
+
+ 'author': "Dvit",
+ 'website': "https://www.dvit.me",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'Accounting',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': [
+ 'account','base'],
+
+ # always loaded
+ 'data': [
+ # 'security/ir.model.access.csv',
+ 'templates.xml',
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+ 'demo.xml',
+ ],
+}
\ No newline at end of file
diff --git a/show_sendby_email/controllers.py b/show_sendby_email/controllers.py
new file mode 100644
index 0000000..a79da9c
--- /dev/null
+++ b/show_sendby_email/controllers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from openerp import http
+
+# class InvoiceView(http.Controller):
+# @http.route('/invoice_view/invoice_view/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/invoice_view/invoice_view/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('invoice_view.listing', {
+# 'root': '/invoice_view/invoice_view',
+# 'objects': http.request.env['invoice_view.invoice_view'].search([]),
+# })
+
+# @http.route('/invoice_view/invoice_view/objects//', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('invoice_view.object', {
+# 'object': obj
+# })
\ No newline at end of file
diff --git a/show_sendby_email/demo.xml b/show_sendby_email/demo.xml
new file mode 100644
index 0000000..03be5e7
--- /dev/null
+++ b/show_sendby_email/demo.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/show_sendby_email/models.py b/show_sendby_email/models.py
new file mode 100644
index 0000000..6f99233
--- /dev/null
+++ b/show_sendby_email/models.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+class invoice_view(models.Model):
+ _name = "ivoice.view"
+ _inherit = 'account.invoice'
+
diff --git a/show_sendby_email/security/ir.model.access.csv b/show_sendby_email/security/ir.model.access.csv
new file mode 100644
index 0000000..3b234ff
--- /dev/null
+++ b/show_sendby_email/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_invoice_view_invoice_view,invoice_view.invoice_view,model_invoice_view_invoice_view,,1,0,0,0
\ No newline at end of file
diff --git a/show_sendby_email/static/description/icon.png b/show_sendby_email/static/description/icon.png
new file mode 100644
index 0000000..a07dc1b
Binary files /dev/null and b/show_sendby_email/static/description/icon.png differ
diff --git a/show_sendby_email/static/description/index.html b/show_sendby_email/static/description/index.html
new file mode 100644
index 0000000..2579402
--- /dev/null
+++ b/show_sendby_email/static/description/index.html
@@ -0,0 +1,63 @@
+
+
+
Show print & Send by email buttons
+
+
+
+
+
This module makes the ( print & Send by email ) buttons avilabe even after registering an invoice payment .
Amount of
+
+
+ Payment method
+
+ With Reference/as value of
+
+
+
+
+
+
Notes:
+
+
+
+
+
+ Responsible:
+
.......................
+
+
+ Accountant:
+
+
+
+ Manager:
+
..................
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/voucher_print/voucher_print_report.xml b/voucher_print/voucher_print_report.xml
new file mode 100644
index 0000000..f5b9a76
--- /dev/null
+++ b/voucher_print/voucher_print_report.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/web-lang/controllers/__init__.py b/web-lang/controllers/__init__.py
deleted file mode 100644
index 039d971..0000000
--- a/web-lang/controllers/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-import main
\ No newline at end of file
diff --git a/web-lang/views/webclient_templates.xml b/web-lang/views/webclient_templates.xml
deleted file mode 100644
index 38f7681..0000000
--- a/web-lang/views/webclient_templates.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web-lang/README.md b/web_lang/README.md
similarity index 100%
rename from web-lang/README.md
rename to web_lang/README.md
diff --git a/web_lang/__init__.py b/web_lang/__init__.py
new file mode 100644
index 0000000..cf92535
--- /dev/null
+++ b/web_lang/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import controllers
diff --git a/web_lang/__openerp__.py b/web_lang/__openerp__.py
new file mode 100644
index 0000000..8a76326
--- /dev/null
+++ b/web_lang/__openerp__.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ 'name': 'Web_lang',
+ 'version': '1.0',
+ 'sequence': 1,
+ 'category': 'Web',
+ 'summary': 'Web client lang based CSS',
+ 'description':"Multi-lang based CSS support for Web client to allow setting language direction (RTL,LTR) and fonts, colors.",
+ 'author': 'DVIT',
+ 'website': 'https://www.dvit.me',
+ 'depends': ['web',
+ ],
+ 'data': ['views/webclient_templates.xml'],
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/web_lang/controllers/__init__.py b/web_lang/controllers/__init__.py
new file mode 100644
index 0000000..b8eaf1b
--- /dev/null
+++ b/web_lang/controllers/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import main
\ No newline at end of file
diff --git a/web-lang/controllers/main.py b/web_lang/controllers/main.py
similarity index 81%
rename from web-lang/controllers/main.py
rename to web_lang/controllers/main.py
index 6e73842..bff8fb2 100644
--- a/web-lang/controllers/main.py
+++ b/web_lang/controllers/main.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (C) 2015 Mohamed M. Hagag.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
import ast
import base64
import csv
diff --git a/web_lang/static/description/icon.png b/web_lang/static/description/icon.png
new file mode 100644
index 0000000..a07dc1b
Binary files /dev/null and b/web_lang/static/description/icon.png differ
diff --git a/web_lang/static/description/index.html b/web_lang/static/description/index.html
new file mode 100644
index 0000000..57ee325
--- /dev/null
+++ b/web_lang/static/description/index.html
@@ -0,0 +1,48 @@
+
+
+
Arabic Web lang
+
+
+
+
+
+Multi-lang based CSS support for Web client to allow setting language direction (RTL,LTR) and fonts, colors .