remove old modules
This commit is contained in:
parent
b72fa710d2
commit
f27293b640
@ -1,93 +0,0 @@
|
||||
# act_revise
|
||||
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
|
||||
## Add your files
|
||||
|
||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.inf-centre.ru/mklab-base/l10n-russia/act_revise.git
|
||||
git branch -M v17-dev
|
||||
git push -uf origin v17-dev
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.inf-centre.ru/mklab-base/l10n-russia/act_revise/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
||||
|
||||
## Test and Deploy
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
|
||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
||||
|
||||
***
|
||||
|
||||
# Editing this README
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
|
||||
## Suggestions for a good README
|
||||
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
@ -1,4 +0,0 @@
|
||||
from . import models
|
||||
from . import report
|
||||
from . import wizard
|
||||
from . import controllers
|
@ -1,45 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': "act_revise",
|
||||
|
||||
'summary': """
|
||||
Добавление отчета акт сверки""",
|
||||
|
||||
'description': """
|
||||
Добавление формы акт сверки, находящегося в контактах, с помощью которого можно легко отслеживать дебеторские и кредиторские проводки с клиентами.
|
||||
|
||||
Для печати:
|
||||
1. Выбираем меню Контакты - конкретного партнера - Действия - "Печать акт сверки";
|
||||
2. В визарде выбираем:
|
||||
2.1. Компанию (для которой нужна сверка с выбранным контактом);
|
||||
2.2. Период сверки;
|
||||
2.3. Цель (один из режимом: все проведенные проводки или все проводки, включая черновики);
|
||||
3. Кнопка "Печать"
|
||||
|
||||
""",
|
||||
|
||||
'author': "Odoo Community Association (OCA), MK Lab",
|
||||
'website': "https://www.inf-centre.ru/",
|
||||
|
||||
'category': 'Uncategorized',
|
||||
'version': '0.1',
|
||||
|
||||
# any module necessary for this one to work correctly
|
||||
"depends": ["account", "portal", "website", "l10n_ru_doc", 'contract'],
|
||||
"data": [
|
||||
"security/ir.model.access.csv",
|
||||
"wizard/general_ledger_wizard_view.xml",
|
||||
"report/layouts.xml",
|
||||
"report/general_ledger.xml",
|
||||
"views/account_account_views.xml",
|
||||
"views/report_general_ledger.xml",
|
||||
"views/portal_templates.xml",
|
||||
],
|
||||
"installable": True,
|
||||
"application": True,
|
||||
"auto_install": False,
|
||||
# only loaded in demonstration mode
|
||||
'demo': [
|
||||
'demo/demo.xml',
|
||||
],
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import controllers
|
@ -1,89 +0,0 @@
|
||||
from odoo import http
|
||||
from odoo.http import request
|
||||
from datetime import datetime, date
|
||||
|
||||
|
||||
class ActRevise(http.Controller):
|
||||
|
||||
@http.route(['/my/act_revise/<string:act>'], type='http', auth="public", website=True)
|
||||
def print_report(self):
|
||||
partner = request.env.user.partner_id.parent_id.id
|
||||
partner_name = request.env.user.partner_id.parent_id.name
|
||||
if not partner:
|
||||
partner = request.env.user.partner_id.id
|
||||
partner_name = request.env.user.partner_id.name
|
||||
company = request.env.user.company_id.id
|
||||
company_name = request.env.user.company_id.name
|
||||
today = date.today()
|
||||
d1 = today.strftime("%d.%m.%y")
|
||||
|
||||
wizard_data = {
|
||||
"target_move": "posted",
|
||||
"hide_account_at_0": True,
|
||||
"foreign_currency": True,
|
||||
"company_id": company,
|
||||
"partner_ids": [partner],
|
||||
"show_cost_center": True,
|
||||
"centralize": True
|
||||
}
|
||||
wizard_record = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data)
|
||||
|
||||
action = request.env.ref('act_revise.action_general_ledger_wizard').read()[0]
|
||||
action['res_id'] = wizard_record.id
|
||||
action['context'] = dict(request.env.context)
|
||||
return request.redirect('/web#action=' + str(action['id']) + '&id=' + str(wizard_record.id) + '&view_type=form')
|
||||
|
||||
# @http.route(['/my/act_revise/<string:act>'], type='http', auth="public", website=True)
|
||||
# def print_report(self):
|
||||
# partner = request.env.user.partner_id.parent_id.id
|
||||
# partner_name = request.env.user.partner_id.parent_id.name
|
||||
# if not partner:
|
||||
# partner = request.env.user.partner_id.id
|
||||
# partner_name = request.env.user.partner_id.name
|
||||
# company = request.env.user.company_id.id
|
||||
# company_name = request.env.user.company_id.name
|
||||
# today = date.today()
|
||||
# d1 = today.strftime("%d.%m.%y")
|
||||
# # new_url = str('Акт Сверки ' + d1 + ' ' + company_name + '_' + partner_name)
|
||||
# # new_url=str('AC ' + company +' - ' + partner + ' ' + d1)
|
||||
# # if request.httprequest.full_path == '/my/act_revise/a?':
|
||||
# # return werkzeug.utils.redirect('/my/act_revise/%s' % new_url)
|
||||
# wizard_data = {"target_move": "posted",
|
||||
# "hide_account_at_0": True,
|
||||
# "foreign_currency": True,
|
||||
# #"show_analytic_tags": True,
|
||||
# "company_id": company,
|
||||
# "partner_ids": [partner],
|
||||
# #"show_partner_details": True,
|
||||
# "show_cost_center": True,
|
||||
# "centralize": True}
|
||||
# t = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data)
|
||||
# data = t._prepare_report_general_ledger()
|
||||
# name = t.get_report_filename()
|
||||
# report_name = name.encode('cp1251')
|
||||
# pdf, _ = request.env['ir.actions.report']._render_qweb_pdf(
|
||||
# 'act_revise.action_print_report_general_ledger_qweb', res_ids=t.id, data=data)
|
||||
# pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)), ]
|
||||
# return request.make_response(pdf, headers=pdfhttpheaders)
|
||||
|
||||
@http.route(['/my/act_revise_contact/<string:act>'], type='http', auth="public", website=True)
|
||||
def print_report_contact(self, date_to, date_from, target_move, company, partner):
|
||||
partner_id = int(partner) or 'default_partner_value'
|
||||
company_id = int(company)
|
||||
wizard_data = {"date_to": date_to,
|
||||
"date_from": date_from,
|
||||
"target_move": target_move,
|
||||
"hide_account_at_0": True,
|
||||
"foreign_currency": True,
|
||||
#"show_analytic_tags": True,
|
||||
"company_id": company_id,
|
||||
"partner_ids": [partner_id],
|
||||
#"show_partner_details": True,
|
||||
"show_cost_center": True,
|
||||
"centralize": True}
|
||||
t = request.env['general.ledger.act_revise.wizard'].sudo().create(wizard_data)
|
||||
data = t._prepare_report_general_ledger()
|
||||
pdf, _ = request.env['ir.actions.report']._render_qweb_pdf(
|
||||
'act_revise.action_print_report_general_ledger_qweb', res_ids=t.id, data=data)
|
||||
pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)), ]
|
||||
return request.make_response(pdf, headers=pdfhttpheaders)
|
@ -1,30 +0,0 @@
|
||||
<odoo>
|
||||
<data>
|
||||
<!--
|
||||
<record id="object0" model="act_revise.act_revise">
|
||||
<field name="name">Object 0</field>
|
||||
<field name="value">0</field>
|
||||
</record>
|
||||
|
||||
<record id="object1" model="act_revise.act_revise">
|
||||
<field name="name">Object 1</field>
|
||||
<field name="value">10</field>
|
||||
</record>
|
||||
|
||||
<record id="object2" model="act_revise.act_revise">
|
||||
<field name="name">Object 2</field>
|
||||
<field name="value">20</field>
|
||||
</record>
|
||||
|
||||
<record id="object3" model="act_revise.act_revise">
|
||||
<field name="name">Object 3</field>
|
||||
<field name="value">30</field>
|
||||
</record>
|
||||
|
||||
<record id="object4" model="act_revise.act_revise">
|
||||
<field name="name">Object 4</field>
|
||||
<field name="value">40</field>
|
||||
</record>
|
||||
-->
|
||||
</data>
|
||||
</odoo>
|
@ -1,2 +0,0 @@
|
||||
from . import account_account
|
||||
from . import ir_actions_report
|
@ -1,7 +0,0 @@
|
||||
from odoo import fields, models, _
|
||||
|
||||
|
||||
class AccountAccount(models.Model):
|
||||
_inherit = "account.account"
|
||||
|
||||
centralized = fields.Boolean(_("Централизованно"))
|
@ -1,10 +0,0 @@
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
class IrActionsReport(models.Model):
|
||||
_inherit = "ir.actions.report"
|
||||
|
||||
@api.model
|
||||
def _prepare_account_financial_report_context(self, data):
|
||||
lang = data and data.get("account_financial_report_lang") or ""
|
||||
return dict(self.env.context or {}, lang=lang) if lang else False
|
@ -1,2 +0,0 @@
|
||||
from . import general_ledger
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,286 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template id="act_revise.general_ledger">
|
||||
<t t-call="act_revise.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="act_revise.internal_layout">
|
||||
<t t-call="act_revise.report_general_ledger_base" />
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
<template id="act_revise.report_general_ledger_base">
|
||||
<t t-set="foreign_currency" t-value="foreign_currency" />
|
||||
<t t-set="filter_partner_ids" t-value="filter_partner_ids" />
|
||||
<div class="page">
|
||||
<style type="text/css">
|
||||
body { background: #ffffff; margin: 0; font-family: Arial; font-size: 10pt; font-style: normal; text-align: center;}
|
||||
tbody, table, tr, td, th { border: none;}
|
||||
tr.R0{ height: 15px; border: border: none; }
|
||||
tr.R0 td.R0t{text-align: center; font-family: Tahoma; font-size: 14pt; font-weight: bold;}
|
||||
tr.R0 td.R0j{text-align: justify }
|
||||
tr.R0 td.R0l{text-align: left}
|
||||
tr.R0 td.R0lb{font-weight: bold; text-align: left}
|
||||
tr.R0 td.R0lbt{font-weight: bold; text-align: left; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0lbox{text-align: left; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid; vertical-align: middle;}
|
||||
tr.R0 td.R0cbox{text-align: center; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid; vertical-align: middle;}
|
||||
tr.R0 td.R0lbbox{font-weight: bold; text-align: left; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid; vertical-align: middle;}
|
||||
tr.R0 td.R0rbox{text-align: right; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0rbbox{font-weight: bold; text-align: right; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.Rcbox{text-align: center; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0cbbox{font-weight: bold; text-align: center; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0lboxf{background: #FFFFCC;text-align: left; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0lbboxf{background: #FFFFCC;font-weight: bold; text-align: left; border-left: #000000 1px
|
||||
solid; border-top: #000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px
|
||||
solid;}
|
||||
tr.R0 td.R0rboxf{background: #FFFFCC;text-align: right; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0rbboxf{background: #FFFFCC;font-weight: bold; text-align: right; border-left: #000000 1px
|
||||
solid; border-top: #000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px
|
||||
solid;}
|
||||
tr.R0 td.Rcboxf{background: #FFFFCC;text-align: center; border-left: #000000 1px solid; border-top:
|
||||
#000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0cbboxf{background: #FFFFCC;font-weight: bold; text-align: center; border-left: #000000 1px
|
||||
solid; border-top: #000000 1px solid; border-right: #000000 1px solid; border-bottom: #000000 1px
|
||||
solid; vertical-align: middle;}
|
||||
tr.R0 td.R0print span img { position: absolute; width: 140px; top: -80px; left: -350px; }
|
||||
tr.R0 td.R0print { overflow: visible; }
|
||||
tr.R0 td.R0print span { position: relative; }
|
||||
tr.R0 td.R0print{ text-align: left; }
|
||||
tr.R0 td.R0fas { font-family: Arial; font-size: 7pt; font-style: normal; text-align: right; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R0fas { overflow: visible; }
|
||||
tr.R0 td.R0fas span { position: relative; }
|
||||
tr.R0 td.R0fas span img { position: absolute; width: 100px; top: -25px; left: 200px;}
|
||||
</style>
|
||||
<t t-set="lines" t-value='[]' />
|
||||
<t t-set="total_debit_init_all" t-value='0.0'/>
|
||||
<t t-set="total_credit_init_all" t-value='0.0'/>
|
||||
|
||||
<t t-foreach="general_ledger" t-as="account">
|
||||
<t t-if="'list_grouped' in account">
|
||||
<t t-foreach="account['list_grouped']" t-as="group_item">
|
||||
|
||||
<t
|
||||
t-set="misc_domain"
|
||||
t-value="[('account_id', '=', account['id']),('date', '<', date_from)]"
|
||||
/>
|
||||
<t
|
||||
t-set="misc_grouped_domain"
|
||||
t-value="[('partner_id', '=', group_item['id'])]"
|
||||
t-if="'partners' in account"
|
||||
/>
|
||||
<t t-set="misc_grouped_domain" t-value="[]" t-else="" />
|
||||
<t t-set="debit_domain" t-value="[('debit', '<>', 0)]" />
|
||||
<span
|
||||
t-att-domain="misc_domain+debit_domain+misc_grouped_domain"
|
||||
res-model="account.move.line"
|
||||
>
|
||||
<t t-set="total_debit_init" t-value="group_item['init_bal']['debit']" />
|
||||
<t t-set="total_debit_init_all" t-value='total_debit_init_all+total_debit_init'/>
|
||||
</span>
|
||||
<t t-set="credit_domain" t-value="[('credit', '<>', 0)]" />
|
||||
<span
|
||||
t-att-domain="misc_domain+credit_domain+misc_grouped_domain"
|
||||
res-model="account.move.line"
|
||||
>
|
||||
<t t-set="total_credit_init" t-value="group_item['init_bal']['credit']" />
|
||||
<t t-set="total_credit_init_all" t-value='total_credit_init_all+total_credit_init'/>
|
||||
</span>
|
||||
<t t-set="lines" t-value='lines+group_item["move_lines"]' />
|
||||
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-set="lines" t-value='o.sorted_lines(lines)'/>
|
||||
<t t-set="total_debit" t-value='0.0' />
|
||||
<t t-set="total_credit" t-value='0.0' />
|
||||
<TABLE CELLSPACING="0">
|
||||
<COL WIDTH="12%"/>
|
||||
<COL WIDTH="14%"/>
|
||||
<COL WIDTH="12%"/>
|
||||
<COL WIDTH="12%"/>
|
||||
<COL WIDTH="12%"/>
|
||||
<COL WIDTH="12%"/>
|
||||
<COL WIDTH="14%"/>
|
||||
<COL WIDTH="12%"/>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0t">Акт сверки</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8">взаимных расчетов за период: <t t-esc="o.get_data_format(date_from) or ''"/> - <t t-esc="o.get_data_format(date_to) or ''"/></td>
|
||||
</tr>
|
||||
<t t-set="pid" t-value="o.partner_ids[0].parent_id or o.partner_ids[0]"/>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8">между: <t t-esc="company_name"/> и <t t-esc="pid.name"/></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8"><t t-if="o.get_contract()">по договору №<t t-esc="o.get_contract().name"/> от <t t-esc="o.get_contract().date_start"/></t></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0j">Мы, нижеподписавшиеся, <t t-esc="company_name"/> с одной стороны, и <t t-esc="pid.name"/>, с другой стороны, составили данный акт сверки в том, что, состояние взаимных расчетов по данным учета следующее:</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="4" CLASS="R0lbox">По данным <t t-esc="company_name"/>, руб</td>
|
||||
<td colspan="4" CLASS="R0lbox">По данным <t t-esc="pid.name"/>, руб</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td CLASS="R0cbbox">Дата</td>
|
||||
<td CLASS="R0cbbox">Документ</td>
|
||||
<td CLASS="R0cbbox">Дебет</td>
|
||||
<td CLASS="R0cbbox">Кредит</td>
|
||||
<td CLASS="R0cbbox">Дата</td>
|
||||
<td CLASS="R0cbbox">Документ</td>
|
||||
<td CLASS="R0cbbox">Дебет</td>
|
||||
<td CLASS="R0cbbox">Кредит</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<t
|
||||
t-set="misc_domain"
|
||||
t-value="[('account_id', '=', account['id']),('date', '<', date_from)]"
|
||||
/>
|
||||
<t
|
||||
t-set="misc_grouped_domain"
|
||||
t-value="[('partner_id', '=', group_item['id'])]"
|
||||
t-if="'partners' in account"
|
||||
/>
|
||||
<t t-set="misc_grouped_domain" t-value="[]" t-else="" />
|
||||
<td colspan="2" CLASS="R0lbox">Сальдо начальное</td>
|
||||
<td CLASS="R0cbox"><span t-esc="'%0.2f'%(total_debit_init_all)"/></td>
|
||||
<td CLASS="R0cbox"><span t-esc="'%0.2f'%(total_credit_init_all)"/></td>
|
||||
<td colspan="2" CLASS="R0lbox">Сальдо начальное</td>
|
||||
<td CLASS="R0cbox"></td>
|
||||
<td CLASS="R0cbox"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0" t-foreach="lines" t-as="line">
|
||||
<t t-set="total_debit" t-value="total_debit+line['debit']" />
|
||||
<t t-set="total_credit" t-value="total_credit+line['credit']" />
|
||||
<td CLASS="R0cbox"><t t-esc="o.get_data_format(line['date']) or ''"/></td>
|
||||
<td CLASS="R0lbox"><t t-raw="line['entry']"/></td>
|
||||
<td CLASS="R0cbox"><t t-raw="'%0.2f'%(line['debit'])"/></td>
|
||||
<td CLASS="R0cbox"><t t-raw="'%0.2f'%(line['credit'])"/></td>
|
||||
<td CLASS="R0cbox"></td>
|
||||
<td CLASS="R0lbox"></td>
|
||||
<td CLASS="R0cbox"></td>
|
||||
<td CLASS="R0cbox"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="2" CLASS="R0lbbox">Обороты за период</td>
|
||||
<td CLASS="R0cbbox"><t t-raw="'%0.2f'%(total_debit)"/>
|
||||
</td>
|
||||
<td CLASS="R0cbbox"><t t-raw="'%0.2f'%(total_credit)"/>
|
||||
</td>
|
||||
<td colspan="2" CLASS="R0lbbox">Обороты за период</td>
|
||||
<td CLASS="R0cbbox"></td>
|
||||
<td CLASS="R0cbbox"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="2" CLASS="R0lbbox">Сальдо конечное</td>
|
||||
<td CLASS="R0cbbox"><t t-raw="'%0.2f'%(total_debit_init_all+total_debit)"/></td>
|
||||
<td CLASS="R0cbbox"><t t-raw="'%0.2f'%(total_credit_init_all+total_credit)"/></td>
|
||||
<td colspan="2" CLASS="R0lbbox">Сальдо конечное</td>
|
||||
<td CLASS="R0cbbox"></td>
|
||||
<td CLASS="R0cbbox"></td>
|
||||
</tr>
|
||||
<t t-set="total_balance_fin" t-value='(total_debit_init_all+total_debit)-(total_credit_init_all+total_credit)'/>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="4" CLASS="R0l">По данным <t t-esc="company_name"/></td>
|
||||
<td colspan="4" CLASS="R0l">По данным <t t-esc="pid.name"/></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="4" CLASS="R0lb">на <t t-esc="o.get_data_format(date_to) or ''"/> задолженность в пользу <t t-if="total_balance_fin>=0"><t t-esc="company_name"/></t><t t-else=""><t t-esc="pid.name"/></t> <t t-esc="'%0.2f'%(abs(total_balance_fin))"/> руб. (<t t-esc="o.rubles(abs(total_balance_fin)) or ''"/>)"
|
||||
</td>
|
||||
<td colspan="4" CLASS="R0lb">на <t t-esc="o.get_data_format(date_to) or ''"/> задолженность в пользу <t t-if="total_balance_fin>=0"><t t-esc="company_name"/></t><t t-else=""><t t-esc="pid.name"/></t> <t t-esc="'%0.2f'%(abs(total_balance_fin))"/> руб. (<t t-esc="o.rubles(abs(total_balance_fin)) or ''"/>)"
|
||||
</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="4" CLASS="R0l">От <t t-esc="company_name"/></td>
|
||||
<td colspan="4" CLASS="R0l">От <t t-esc="pid.name"/></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="4" CLASS="R0lb"><t t-esc="o.company_id.chief_id.function or ''"/></td>
|
||||
<td colspan="4" CLASS="R0lb">Директор</td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="8" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="2" CLASS="R0fas"><SPAN><t t-raw="o.company_id.print_facsimile and o.img(o.company_id.chief_id.facsimile) or ''"/></SPAN></td>
|
||||
<td colspan="2" CLASS="R0lb"><t t-esc="o.initials(o.company_id.chief_id.name) or ''"/></td>
|
||||
<td colspan="2" CLASS="R0lb"></td>
|
||||
<td colspan="2" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
<tr CLASS="R0">
|
||||
<td colspan="2" CLASS="R0lbt">М.П.</td>
|
||||
<td colspan="2" CLASS="R0print"><SPAN><t t-raw="o.company_id.print_stamp and (o.company_id.print_anywhere or context.get('mark_invoice_as_sent', False)) and o.img(o.company_id.stamp) or ''"/></SPAN></td>
|
||||
<td colspan="2" CLASS="R0lbt">М.П.</td>
|
||||
<td colspan="2" CLASS="R0lb"></td>
|
||||
</tr>
|
||||
</TABLE>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- <report-->
|
||||
<!-- id="action_print_report_general_ledger_qweb"-->
|
||||
<!-- model="general.ledger.report.wizard"-->
|
||||
<!-- string="Акт сверки"-->
|
||||
<!-- report_type="qweb-pdf"-->
|
||||
<!-- menu="False"-->
|
||||
<!-- name="act_revise.general_ledger"-->
|
||||
<!-- file="act_revise.general_ledger"-->
|
||||
<!-- print_report_name=" 'Акт сверки - %s' %s (object.get_report_filename()) or ''"-->
|
||||
<!-- />-->
|
||||
<record id="action_print_report_general_ledger_qweb" model="ir.actions.report">
|
||||
<field name="name">Акт сверки</field>
|
||||
<field name="model">general.ledger.act_revise.wizard</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">act_revise.general_ledger</field>
|
||||
<field name="report_file">act_revise.general_ledger</field>
|
||||
<field name="print_report_name">'Акт сверки - %s' % (object.get_report_filename() or '')</field>
|
||||
<field name="binding_model_id" ref="model_general_ledger_act_revise_wizard"/>
|
||||
</record>
|
||||
|
||||
<record id="report_qweb_paperformat" model="report.paperformat">
|
||||
<field name="name">Account financial report qweb paperformat</field>
|
||||
<field name="default" eval="True" />
|
||||
<field name="format">custom</field>
|
||||
<field name="page_height">297</field>
|
||||
<field name="page_width">210</field>
|
||||
<field name="orientation">Landscape</field>
|
||||
<field name="margin_top">12</field>
|
||||
<field name="margin_bottom">8</field>
|
||||
<field name="margin_left">5</field>
|
||||
<field name="margin_right">5</field>
|
||||
<field name="header_line" eval="False" />
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">110</field>
|
||||
</record>
|
||||
<record id="action_print_report_general_ledger_qweb" model="ir.actions.report">
|
||||
<field name="paperformat_id" ref="report_qweb_paperformat" />
|
||||
</record>
|
||||
</odoo>
|
@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template id="act_revise.html_container">
|
||||
<t t-set="body_classname" t-value="'container'" />
|
||||
<t t-call="web.report_layout">
|
||||
<t t-out="0" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="act_revise.internal_layout">
|
||||
<div class="article o_account_financial_reports_page">
|
||||
<t t-out="0" />
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="row">
|
||||
<div class="col-6 custom_footer">
|
||||
<span
|
||||
t-esc="context_timestamp(datetime.datetime.now()).strftime('%Y-%m-%d %H:%M')"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-6 text-right custom_footer">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">
|
||||
<span class="page" />
|
||||
</li>
|
||||
<li class="list-inline-item">/</li>
|
||||
<li class="list-inline-item">
|
||||
<span class="topage" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</odoo>
|
@ -1,2 +0,0 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_general_ledger_act_revise_wizard,general.ledger.act_revise.wizard,model_general_ledger_act_revise_wizard,base.group_user,1,1,1,1
|
|
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="view_account_form" model="ir.ui.view">
|
||||
<field name="name">account.account.form.inherit</field>
|
||||
<field name="inherit_id" ref="account.view_account_form" />
|
||||
<field name="model">account.account</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="deprecated" position="after">
|
||||
<field name="centralized" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<template id="portal_my_home_act_revise" name="Portal My Home : act revise" inherit_id="portal.portal_my_home" priority="40">
|
||||
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
|
||||
<a t-attf-href="/my/act_revise/a">
|
||||
<button type="button" class="btn btn-primary btn-md o_website_form_send">Печатать акт сверки</button>
|
||||
</a>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template id="report_general_ledger">
|
||||
<div class="o_act_revise_page">
|
||||
<t t-call="act_revise.report_buttons" />
|
||||
<t t-call="act_revise.report_general_ledger_base" />
|
||||
</div>
|
||||
</template>
|
||||
</odoo>
|
@ -1,2 +0,0 @@
|
||||
from . import abstract_wizard
|
||||
from . import general_ledger_wizard
|
@ -1,38 +0,0 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class AbstractWizard(models.AbstractModel):
|
||||
_name = "act_revise.abstract_wizard"
|
||||
_description = "Abstract Wizard"
|
||||
|
||||
def _get_partner_ids_domain(self):
|
||||
return [
|
||||
"&",
|
||||
"|",
|
||||
("company_id", "=", self.company_id.id),
|
||||
("company_id", "=", False),
|
||||
"|",
|
||||
("parent_id", "=", False),
|
||||
("is_company", "=", True),
|
||||
]
|
||||
|
||||
def _default_partners(self):
|
||||
context = self.env.context
|
||||
if context.get("active_ids") and context.get("active_model") == "res.partner":
|
||||
partners = self.env["res.partner"].browse(context["active_ids"])
|
||||
corp_partners = partners.filtered("parent_id")
|
||||
partners -= corp_partners
|
||||
partners |= corp_partners.mapped("commercial_partner_id")
|
||||
return partners.ids
|
||||
|
||||
company_id = fields.Many2one(
|
||||
comodel_name="res.company",
|
||||
default=lambda self: self.env.company.id,
|
||||
required=False,
|
||||
string="Компания",
|
||||
)
|
||||
|
||||
def button_export_pdf(self):
|
||||
self.ensure_one()
|
||||
report_type = "qweb-pdf"
|
||||
return self._export(report_type)
|
@ -1,898 +0,0 @@
|
||||
import logging
|
||||
import time
|
||||
from ast import literal_eval
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.tools import date_utils,pycompat
|
||||
from pytils import dt,numeral
|
||||
from datetime import datetime, date
|
||||
import re
|
||||
import urllib
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
class GeneralLedgerReportWizard(models.TransientModel):
|
||||
"""General ledger report wizard."""
|
||||
|
||||
_name = "general.ledger.act_revise.wizard"
|
||||
_description = "General Ledger Report Wizard"
|
||||
_inherit = "act_revise.abstract_wizard"
|
||||
|
||||
# date_range_id = fields.Many2one(comodel_name="date.range", string="Date range")
|
||||
date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from())
|
||||
date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today)
|
||||
fy_start_date = fields.Date(compute="_compute_fy_start_date")
|
||||
target_move = fields.Selection(
|
||||
[("posted", "Все проведенные проводки"), ("all", "Все проводки")],
|
||||
string="Цель операции",
|
||||
required=True,
|
||||
default="posted",
|
||||
)
|
||||
account_ids = fields.Many2many(
|
||||
comodel_name="account.account", string=_("Filter accounts")
|
||||
)
|
||||
centralize = fields.Boolean(string=_("Activate centralization"), default=True)
|
||||
hide_account_at_0 = fields.Boolean(
|
||||
string=_("Hide account ending balance at 0"),
|
||||
help=_("Use this filter to hide an account or a partner "
|
||||
"with an ending balance at 0. "
|
||||
"If partners are filtered, "
|
||||
"debits and credits totals will not match the trial balance."),
|
||||
)
|
||||
receivable_accounts_only = fields.Boolean()
|
||||
payable_accounts_only = fields.Boolean()
|
||||
partner_ids = fields.Many2many(
|
||||
comodel_name="res.partner",
|
||||
string=_("Filter partners"),
|
||||
default=lambda self: self._default_partners(),
|
||||
)
|
||||
account_journal_ids = fields.Many2many(
|
||||
comodel_name="account.journal", string=_("Filter journals")
|
||||
)
|
||||
cost_center_ids = fields.Many2many(
|
||||
comodel_name="account.analytic.account", string=_("Filter cost centers")
|
||||
)
|
||||
|
||||
not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True)
|
||||
foreign_currency = fields.Boolean(
|
||||
string=_("Show foreign currency"),
|
||||
help=_("Display foreign currency for move lines, unless "
|
||||
"account currency is not setup through chart of accounts "
|
||||
"will display initial and final balance in that currency."),
|
||||
default=lambda self: self._default_foreign_currency(),
|
||||
)
|
||||
account_code_from = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
help="Starting account in a range",
|
||||
)
|
||||
account_code_to = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
help="Ending account in a range",
|
||||
)
|
||||
grouped_by = fields.Selection(
|
||||
selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")],
|
||||
default="partners",
|
||||
)
|
||||
show_cost_center = fields.Boolean(
|
||||
string="Show Analytic Account",
|
||||
default=True,
|
||||
)
|
||||
domain = fields.Char(
|
||||
string="Journal Items Domain",
|
||||
default=[],
|
||||
help="This domain will be used to select specific domain for Journal " "Items",
|
||||
)
|
||||
|
||||
# def _print_report(self, report_type):
|
||||
# self.ensure_one()
|
||||
# data = self._prepare_report_general_ledger()
|
||||
# report = self.env["ir.actions.report"].search(
|
||||
# [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
|
||||
# if self.partner_ids[0].parent_id:
|
||||
# partner = int(self.partner_ids[0].parent_id.id)
|
||||
# else:
|
||||
# partner = int(self.partner_ids[0].id)
|
||||
# return {
|
||||
# 'type': 'ir.actions.act_url',
|
||||
# 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
|
||||
# urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
|
||||
# self.company_id.id, partner),
|
||||
# 'target': 'new',
|
||||
# }
|
||||
|
||||
def _get_account_move_lines_domain(self):
|
||||
domain = literal_eval(self.domain) if self.domain else []
|
||||
return domain
|
||||
|
||||
@api.onchange("account_code_from", "account_code_to")
|
||||
def on_change_account_range(self):
|
||||
if (
|
||||
self.account_code_from
|
||||
and self.account_code_from.code.isdigit()
|
||||
and self.account_code_to
|
||||
and self.account_code_to.code.isdigit()
|
||||
):
|
||||
start_range = self.account_code_from.code
|
||||
end_range = self.account_code_to.code
|
||||
self.account_ids = self.env["account.account"].search(
|
||||
[("code", ">=", start_range), ("code", "<=", end_range)]
|
||||
)
|
||||
if self.company_id:
|
||||
self.account_ids = self.account_ids.filtered(
|
||||
lambda a: a.company_id == self.company_id
|
||||
)
|
||||
|
||||
def _init_date_from(self):
|
||||
"""set start date to begin of current year if fiscal year running"""
|
||||
today = fields.Date.context_today(self)
|
||||
company = self.company_id or self.env.company
|
||||
last_fsc_month = company.fiscalyear_last_month
|
||||
last_fsc_day = company.fiscalyear_last_day
|
||||
|
||||
if (
|
||||
today.month < int(last_fsc_month)
|
||||
or today.month == int(last_fsc_month)
|
||||
and today.day <= last_fsc_day
|
||||
):
|
||||
return time.strftime("%Y-01-01")
|
||||
else:
|
||||
return False
|
||||
|
||||
def _default_foreign_currency(self):
|
||||
return self.env.user.has_group("base.group_multi_currency")
|
||||
|
||||
@api.depends("date_from")
|
||||
def _compute_fy_start_date(self):
|
||||
for wiz in self:
|
||||
if wiz.date_from:
|
||||
date_from, date_to = date_utils.get_fiscal_year(
|
||||
wiz.date_from,
|
||||
day=self.company_id.fiscalyear_last_day,
|
||||
month=int(self.company_id.fiscalyear_last_month),
|
||||
)
|
||||
wiz.fy_start_date = date_from
|
||||
else:
|
||||
wiz.fy_start_date = False
|
||||
|
||||
@api.onchange("company_id")
|
||||
def onchange_company_id(self):
|
||||
"""Handle company change."""
|
||||
count = self.env["account.account"].search_count(
|
||||
[
|
||||
("account_type", "=", "equity_unaffected"),
|
||||
("company_id", "=", self.company_id.id),
|
||||
]
|
||||
)
|
||||
self.not_only_one_unaffected_earnings_account = count != 1
|
||||
# if (
|
||||
# self.company_id
|
||||
# and self.date_range_id.company_id
|
||||
# and self.date_range_id.company_id != self.company_id
|
||||
# ):
|
||||
# self.date_range_id = False
|
||||
if self.company_id and self.account_journal_ids:
|
||||
self.account_journal_ids = self.account_journal_ids.filtered(
|
||||
lambda p: p.company_id == self.company_id or not p.company_id
|
||||
)
|
||||
if self.company_id and self.partner_ids:
|
||||
self.partner_ids = self.partner_ids.filtered(
|
||||
lambda p: p.company_id == self.company_id or not p.company_id
|
||||
)
|
||||
if self.company_id and self.account_ids:
|
||||
if self.receivable_accounts_only or self.payable_accounts_only:
|
||||
self.onchange_type_accounts_only()
|
||||
else:
|
||||
self.account_ids = self.account_ids.filtered(
|
||||
lambda a: a.company_id == self.company_id
|
||||
)
|
||||
if self.company_id and self.cost_center_ids:
|
||||
self.cost_center_ids = self.cost_center_ids.filtered(
|
||||
lambda c: c.company_id == self.company_id
|
||||
)
|
||||
res = {
|
||||
"domain": {
|
||||
"account_ids": [],
|
||||
"partner_ids": [],
|
||||
"account_journal_ids": [],
|
||||
"cost_center_ids": [],
|
||||
# "date_range_id": [],
|
||||
}
|
||||
}
|
||||
if not self.company_id:
|
||||
return res
|
||||
else:
|
||||
res["domain"]["account_ids"] += [("company_id", "=", self.company_id.id)]
|
||||
res["domain"]["account_journal_ids"] += [
|
||||
("company_id", "=", self.company_id.id)
|
||||
]
|
||||
res["domain"]["partner_ids"] += self._get_partner_ids_domain()
|
||||
res["domain"]["cost_center_ids"] += [
|
||||
("company_id", "=", self.company_id.id)
|
||||
]
|
||||
# res["domain"]["date_range_id"] += [
|
||||
# "|",
|
||||
# ("company_id", "=", self.company_id.id),
|
||||
# ("company_id", "=", False),
|
||||
# ]
|
||||
return res
|
||||
|
||||
# @api.onchange("date_range_id")
|
||||
# def onchange_date_range_id(self):
|
||||
# """Handle date range change."""
|
||||
# if self.date_range_id:
|
||||
# self.date_from = self.date_range_id.date_start
|
||||
# self.date_to = self.date_range_id.date_end
|
||||
|
||||
# @api.constrains("company_id", "date_range_id")
|
||||
# def _check_company_id_date_range_id(self):
|
||||
# for rec in self.sudo():
|
||||
# if (
|
||||
# rec.company_id
|
||||
# and rec.date_range_id.company_id
|
||||
# and rec.company_id != rec.date_range_id.company_id
|
||||
# ):
|
||||
# raise ValidationError(
|
||||
# _(
|
||||
# "The Company in the General Ledger Report Wizard and in "
|
||||
# "Date Range must be the same."
|
||||
# )
|
||||
# )
|
||||
|
||||
@api.onchange("receivable_accounts_only", "payable_accounts_only")
|
||||
def onchange_type_accounts_only(self):
|
||||
"""Handle receivable/payable accounts only change."""
|
||||
if self.receivable_accounts_only or self.payable_accounts_only:
|
||||
domain = [("company_id", "=", self.company_id.id)]
|
||||
if self.receivable_accounts_only and self.payable_accounts_only:
|
||||
domain += [
|
||||
("account_type", "in", ("asset_receivable", "liability_payable"))
|
||||
]
|
||||
elif self.receivable_accounts_only:
|
||||
domain += [("account_type", "=", "asset_receivable")]
|
||||
elif self.payable_accounts_only:
|
||||
domain += [("account_type", "=", "liability_payable")]
|
||||
self.account_ids = self.env["account.account"].search(domain)
|
||||
else:
|
||||
self.account_ids = None
|
||||
|
||||
@api.onchange("partner_ids")
|
||||
def onchange_partner_ids(self):
|
||||
"""Handle partners change."""
|
||||
if self.partner_ids:
|
||||
self.receivable_accounts_only = self.payable_accounts_only = True
|
||||
else:
|
||||
self.receivable_accounts_only = self.payable_accounts_only = False
|
||||
|
||||
@api.depends("company_id")
|
||||
def _compute_unaffected_earnings_account(self):
|
||||
for record in self:
|
||||
record.unaffected_earnings_account = self.env["account.account"].search(
|
||||
[
|
||||
("account_type", "=", "equity_unaffected"),
|
||||
("company_id", "=", record.company_id.id),
|
||||
]
|
||||
)
|
||||
|
||||
unaffected_earnings_account = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
compute="_compute_unaffected_earnings_account",
|
||||
store=True,
|
||||
)
|
||||
|
||||
# def _print_report(self, report_type):
|
||||
# self.ensure_one()
|
||||
# data = self._prepare_report_general_ledger()
|
||||
# report_name = "act_revise.general_ledger"
|
||||
# return (
|
||||
# self.env["ir.actions.report"]
|
||||
# .search(
|
||||
# [("report_name", "=", report_name), ("report_type", "=", report_type)],
|
||||
# limit=1,
|
||||
# )
|
||||
# .report_action(self, data=data)
|
||||
# )
|
||||
def _print_report(self, report_type):
|
||||
self.ensure_one()
|
||||
data = self._prepare_report_general_ledger()
|
||||
report = self.env["ir.actions.report"].search(
|
||||
[("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
|
||||
|
||||
if self.partner_ids[0].parent_id:
|
||||
partner = int(self.partner_ids[0].parent_id.id)
|
||||
else:
|
||||
partner = int(self.partner_ids[0].id)
|
||||
account_data = self.env['account.move.line'].sudo().search([
|
||||
('partner_id', '=', partner),
|
||||
('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')),
|
||||
('account_id.non_trade', '=', False),
|
||||
('date', '<=', self.date_to),
|
||||
('date', '>=', self.date_from)
|
||||
])
|
||||
logging.warning(f'account_data {account_data}')
|
||||
if self.target_move == 'posted' and not account_data.filtered(lambda p: p.parent_state == 'posted') or not account_data:
|
||||
raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.')
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
|
||||
urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
|
||||
self.company_id.id, partner),
|
||||
'target': 'new',
|
||||
}
|
||||
|
||||
def _prepare_report_general_ledger(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
"wizard_id": self.id,
|
||||
"date_from": self.date_from,
|
||||
"date_to": self.date_to,
|
||||
"only_posted_moves": self.target_move == "posted",
|
||||
"hide_account_at_0": self.hide_account_at_0,
|
||||
"foreign_currency": self.foreign_currency,
|
||||
"company_id": self.company_id.id,
|
||||
"account_ids": self.account_ids.ids,
|
||||
"partner_ids": self.partner_ids.ids,
|
||||
"grouped_by": self.grouped_by,
|
||||
"cost_center_ids": self.cost_center_ids.ids,
|
||||
"show_cost_center": self.show_cost_center,
|
||||
"journal_ids": self.account_journal_ids.ids,
|
||||
"centralize": self.centralize,
|
||||
"fy_start_date": self.fy_start_date,
|
||||
"unaffected_earnings_account": self.unaffected_earnings_account.id,
|
||||
"account_financial_report_lang": self.env.lang,
|
||||
"domain": self._get_account_move_lines_domain(),
|
||||
}
|
||||
|
||||
def _export(self, report_type):
|
||||
"""Default export is PDF."""
|
||||
return self._print_report(report_type)
|
||||
|
||||
def _get_atr_from_dict(self, obj_id, data, key):
|
||||
try:
|
||||
return data[obj_id][key]
|
||||
except KeyError:
|
||||
return data[str(obj_id)][key]
|
||||
|
||||
def numer(self, name):
|
||||
if name:
|
||||
numeration = re.findall('\d+$', name)
|
||||
if numeration: return numeration[0]
|
||||
return name
|
||||
|
||||
def get_data_format(self, date):
|
||||
if date and date != 'False':
|
||||
return dt.ru_strftime(u'%d.%m.%Y г.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True)
|
||||
return ''
|
||||
|
||||
def initials(self, fio):
|
||||
if fio:
|
||||
return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip()
|
||||
return ''
|
||||
|
||||
def rubles(self, sum):
|
||||
"Transform sum number in rubles to text"
|
||||
text_rubles = numeral.rubles(int(sum))
|
||||
copeck = round((sum - int(sum)) * 100)
|
||||
text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек"))
|
||||
return ("%s %02d %s") % (text_rubles, copeck, text_copeck)
|
||||
|
||||
def img(self, img, type='png', width=0, height=0):
|
||||
if width:
|
||||
width = "width='%spx'" % (width)
|
||||
else:
|
||||
width = " "
|
||||
if height:
|
||||
height = "height='%spx'" % (height)
|
||||
else:
|
||||
height = " "
|
||||
toreturn = "<img %s %s src='data:image/%s;base64,%s' />" % (
|
||||
width,
|
||||
height,
|
||||
type,
|
||||
str(pycompat.to_text(img)))
|
||||
return toreturn
|
||||
|
||||
def get_contract(self):
|
||||
partner = int(self.partner_ids[0].id)
|
||||
contract = self.env['partner.contract.customer'].search(
|
||||
[('partner_id', '=', partner), ('state', '=', 'signed')], limit=1)
|
||||
if contract:
|
||||
return contract
|
||||
|
||||
def get_function_partner(self, partner):
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
if director:
|
||||
if director.function:
|
||||
return director.function or 'отсутствует'
|
||||
|
||||
def get_name_partner(self, partner):
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
if director:
|
||||
return director.name or 'отсутствует'
|
||||
|
||||
def get_report_filename(self):
|
||||
today = date.today()
|
||||
d1 = today.strftime("%d-%m-%Y")
|
||||
if self.partner_ids[0].parent_id:
|
||||
p = ''.join(self.partner_ids[0].parent_id.name)
|
||||
else:
|
||||
p = ''.join(self.partner_ids[0].name)
|
||||
# return 'Акт Сверки '+ d1 + ' ' + self.company_id.name+'_'+p
|
||||
return str(self.company_id.id) + ' - ' + ' ' + d1
|
||||
|
||||
def sorted_lines(self, list):
|
||||
list = sorted(list, key=lambda k: k.get('date'), reverse=False)
|
||||
return list
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#
|
||||
# import time
|
||||
# from ast import literal_eval
|
||||
# from odoo import _, api, fields, models
|
||||
# from odoo.tools import date_utils,pycompat
|
||||
# from pytils import dt,numeral
|
||||
# from datetime import datetime, date
|
||||
# import re
|
||||
# import urllib
|
||||
#
|
||||
# class GeneralLedgerReportWizard(models.TransientModel):
|
||||
# """General ledger report wizard."""
|
||||
#
|
||||
# _name = "general.ledger.act_revise.wizard"
|
||||
# _description = "General Ledger Report Wizard"
|
||||
# _inherit = "act_revise.abstract_wizard"
|
||||
#
|
||||
# # date_range_id = fields.Many2one(comodel_name="date.range", string="Date range")
|
||||
# date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from())
|
||||
# date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today)
|
||||
# fy_start_date = fields.Date(compute="_compute_fy_start_date")
|
||||
# target_move = fields.Selection(
|
||||
# [("posted", "Все проведенные проводки"), ("all", "Все проводки")],
|
||||
# string="Цель операции",
|
||||
# required=True,
|
||||
# default="posted",
|
||||
# )
|
||||
# account_ids = fields.Many2many(
|
||||
# comodel_name="account.account", string=_("Filter accounts")
|
||||
# )
|
||||
# centralize = fields.Boolean(string=_("Activate centralization"), default=True)
|
||||
# hide_account_at_0 = fields.Boolean(
|
||||
# string=_("Hide account ending balance at 0"),
|
||||
# help=_("Use this filter to hide an account or a partner "
|
||||
# "with an ending balance at 0. "
|
||||
# "If partners are filtered, "
|
||||
# "debits and credits totals will not match the trial balance."),
|
||||
# )
|
||||
# receivable_accounts_only = fields.Boolean()
|
||||
# payable_accounts_only = fields.Boolean()
|
||||
# partner_ids = fields.Many2many(
|
||||
# comodel_name="res.partner",
|
||||
# string=_("Filter partners"),
|
||||
# default=lambda self: self._default_partners(),
|
||||
# )
|
||||
# account_journal_ids = fields.Many2many(
|
||||
# comodel_name="account.journal", string=_("Filter journals")
|
||||
# )
|
||||
# cost_center_ids = fields.Many2many(
|
||||
# comodel_name="account.analytic.account", string=_("Filter cost centers")
|
||||
# )
|
||||
#
|
||||
# not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True)
|
||||
# foreign_currency = fields.Boolean(
|
||||
# string=_("Show foreign currency"),
|
||||
# help=_("Display foreign currency for move lines, unless "
|
||||
# "account currency is not setup through chart of accounts "
|
||||
# "will display initial and final balance in that currency."),
|
||||
# default=lambda self: self._default_foreign_currency(),
|
||||
# )
|
||||
# account_code_from = fields.Many2one(
|
||||
# comodel_name="account.account",
|
||||
# help="Starting account in a range",
|
||||
# )
|
||||
# account_code_to = fields.Many2one(
|
||||
# comodel_name="account.account",
|
||||
# help="Ending account in a range",
|
||||
# )
|
||||
# grouped_by = fields.Selection(
|
||||
# selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")],
|
||||
# default="partners",
|
||||
# )
|
||||
# show_cost_center = fields.Boolean(
|
||||
# string="Show Analytic Account",
|
||||
# default=True,
|
||||
# )
|
||||
# domain = fields.Char(
|
||||
# string="Journal Items Domain",
|
||||
# default=[],
|
||||
# help="This domain will be used to select specific domain for Journal " "Items",
|
||||
# )
|
||||
#
|
||||
# # def _print_report(self, report_type):
|
||||
# # self.ensure_one()
|
||||
# # data = self._prepare_report_general_ledger()
|
||||
# # report = self.env["ir.actions.report"].search(
|
||||
# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
|
||||
# # if self.partner_ids[0].parent_id:
|
||||
# # partner = int(self.partner_ids[0].parent_id.id)
|
||||
# # else:
|
||||
# # partner = int(self.partner_ids[0].id)
|
||||
# # return {
|
||||
# # 'type': 'ir.actions.act_url',
|
||||
# # 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
|
||||
# # urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
|
||||
# # self.company_id.id, partner),
|
||||
# # 'target': 'new',
|
||||
# # }
|
||||
#
|
||||
# def _get_account_move_lines_domain(self):
|
||||
# domain = literal_eval(self.domain) if self.domain else []
|
||||
# return domain
|
||||
#
|
||||
# @api.onchange("account_code_from", "account_code_to")
|
||||
# def on_change_account_range(self):
|
||||
# if (
|
||||
# self.account_code_from
|
||||
# and self.account_code_from.code.isdigit()
|
||||
# and self.account_code_to
|
||||
# and self.account_code_to.code.isdigit()
|
||||
# ):
|
||||
# start_range = self.account_code_from.code
|
||||
# end_range = self.account_code_to.code
|
||||
# self.account_ids = self.env["account.account"].search(
|
||||
# [("code", ">=", start_range), ("code", "<=", end_range)]
|
||||
# )
|
||||
# if self.company_id:
|
||||
# self.account_ids = self.account_ids.filtered(
|
||||
# lambda a: a.company_id == self.company_id
|
||||
# )
|
||||
#
|
||||
# def _init_date_from(self):
|
||||
# """set start date to begin of current year if fiscal year running"""
|
||||
# today = fields.Date.context_today(self)
|
||||
# company = self.company_id or self.env.company
|
||||
# last_fsc_month = company.fiscalyear_last_month
|
||||
# last_fsc_day = company.fiscalyear_last_day
|
||||
#
|
||||
# if (
|
||||
# today.month < int(last_fsc_month)
|
||||
# or today.month == int(last_fsc_month)
|
||||
# and today.day <= last_fsc_day
|
||||
# ):
|
||||
# return time.strftime("%Y-01-01")
|
||||
# else:
|
||||
# return False
|
||||
#
|
||||
# def _default_foreign_currency(self):
|
||||
# return self.env.user.has_group("base.group_multi_currency")
|
||||
#
|
||||
# @api.depends("date_from")
|
||||
# def _compute_fy_start_date(self):
|
||||
# for wiz in self:
|
||||
# if wiz.date_from:
|
||||
# date_from, date_to = date_utils.get_fiscal_year(
|
||||
# wiz.date_from,
|
||||
# day=self.company_id.fiscalyear_last_day,
|
||||
# month=int(self.company_id.fiscalyear_last_month),
|
||||
# )
|
||||
# wiz.fy_start_date = date_from
|
||||
# else:
|
||||
# wiz.fy_start_date = False
|
||||
#
|
||||
# @api.onchange("company_id")
|
||||
# def onchange_company_id(self):
|
||||
# """Handle company change."""
|
||||
# count = self.env["account.account"].search_count(
|
||||
# [
|
||||
# ("account_type", "=", "equity_unaffected"),
|
||||
# ("company_id", "=", self.company_id.id),
|
||||
# ]
|
||||
# )
|
||||
# self.not_only_one_unaffected_earnings_account = count != 1
|
||||
# # if (
|
||||
# # self.company_id
|
||||
# # and self.date_range_id.company_id
|
||||
# # and self.date_range_id.company_id != self.company_id
|
||||
# # ):
|
||||
# # self.date_range_id = False
|
||||
# if self.company_id and self.account_journal_ids:
|
||||
# self.account_journal_ids = self.account_journal_ids.filtered(
|
||||
# lambda p: p.company_id == self.company_id or not p.company_id
|
||||
# )
|
||||
# if self.company_id and self.partner_ids:
|
||||
# self.partner_ids = self.partner_ids.filtered(
|
||||
# lambda p: p.company_id == self.company_id or not p.company_id
|
||||
# )
|
||||
# if self.company_id and self.account_ids:
|
||||
# if self.receivable_accounts_only or self.payable_accounts_only:
|
||||
# self.onchange_type_accounts_only()
|
||||
# else:
|
||||
# self.account_ids = self.account_ids.filtered(
|
||||
# lambda a: a.company_id == self.company_id
|
||||
# )
|
||||
# if self.company_id and self.cost_center_ids:
|
||||
# self.cost_center_ids = self.cost_center_ids.filtered(
|
||||
# lambda c: c.company_id == self.company_id
|
||||
# )
|
||||
# res = {
|
||||
# "domain": {
|
||||
# "account_ids": [],
|
||||
# "partner_ids": [],
|
||||
# "account_journal_ids": [],
|
||||
# "cost_center_ids": [],
|
||||
# # "date_range_id": [],
|
||||
# }
|
||||
# }
|
||||
# if not self.company_id:
|
||||
# return res
|
||||
# else:
|
||||
# res["domain"]["account_ids"] += [("company_id", "=", self.company_id.id)]
|
||||
# res["domain"]["account_journal_ids"] += [
|
||||
# ("company_id", "=", self.company_id.id)
|
||||
# ]
|
||||
# res["domain"]["partner_ids"] += self._get_partner_ids_domain()
|
||||
# res["domain"]["cost_center_ids"] += [
|
||||
# ("company_id", "=", self.company_id.id)
|
||||
# ]
|
||||
# # res["domain"]["date_range_id"] += [
|
||||
# # "|",
|
||||
# # ("company_id", "=", self.company_id.id),
|
||||
# # ("company_id", "=", False),
|
||||
# # ]
|
||||
# return res
|
||||
#
|
||||
# # @api.onchange("date_range_id")
|
||||
# # def onchange_date_range_id(self):
|
||||
# # """Handle date range change."""
|
||||
# # if self.date_range_id:
|
||||
# # self.date_from = self.date_range_id.date_start
|
||||
# # self.date_to = self.date_range_id.date_end
|
||||
#
|
||||
# # @api.constrains("company_id", "date_range_id")
|
||||
# # def _check_company_id_date_range_id(self):
|
||||
# # for rec in self.sudo():
|
||||
# # if (
|
||||
# # rec.company_id
|
||||
# # and rec.date_range_id.company_id
|
||||
# # and rec.company_id != rec.date_range_id.company_id
|
||||
# # ):
|
||||
# # raise ValidationError(
|
||||
# # _(
|
||||
# # "The Company in the General Ledger Report Wizard and in "
|
||||
# # "Date Range must be the same."
|
||||
# # )
|
||||
# # )
|
||||
#
|
||||
# @api.onchange("receivable_accounts_only", "payable_accounts_only")
|
||||
# def onchange_type_accounts_only(self):
|
||||
# """Handle receivable/payable accounts only change."""
|
||||
# if self.receivable_accounts_only or self.payable_accounts_only:
|
||||
# domain = [("company_id", "=", self.company_id.id)]
|
||||
# if self.receivable_accounts_only and self.payable_accounts_only:
|
||||
# domain += [
|
||||
# ("account_type", "in", ("asset_receivable", "liability_payable"))
|
||||
# ]
|
||||
# elif self.receivable_accounts_only:
|
||||
# domain += [("account_type", "=", "asset_receivable")]
|
||||
# elif self.payable_accounts_only:
|
||||
# domain += [("account_type", "=", "liability_payable")]
|
||||
# self.account_ids = self.env["account.account"].search(domain)
|
||||
# else:
|
||||
# self.account_ids = None
|
||||
#
|
||||
# @api.onchange("partner_ids")
|
||||
# def onchange_partner_ids(self):
|
||||
# """Handle partners change."""
|
||||
# if self.partner_ids:
|
||||
# self.receivable_accounts_only = self.payable_accounts_only = True
|
||||
# else:
|
||||
# self.receivable_accounts_only = self.payable_accounts_only = False
|
||||
#
|
||||
# @api.depends("company_id")
|
||||
# def _compute_unaffected_earnings_account(self):
|
||||
# for record in self:
|
||||
# record.unaffected_earnings_account = self.env["account.account"].search(
|
||||
# [
|
||||
# ("account_type", "=", "equity_unaffected"),
|
||||
# ("company_id", "=", record.company_id.id),
|
||||
# ]
|
||||
# )
|
||||
#
|
||||
# unaffected_earnings_account = fields.Many2one(
|
||||
# comodel_name="account.account",
|
||||
# compute="_compute_unaffected_earnings_account",
|
||||
# store=True,
|
||||
# )
|
||||
#
|
||||
# # def _print_report(self, report_type):
|
||||
# # self.ensure_one()
|
||||
# # data = self._prepare_report_general_ledger()
|
||||
# # report_name = "act_revise.general_ledger"
|
||||
# # return (
|
||||
# # self.env["ir.actions.report"]
|
||||
# # .search(
|
||||
# # [("report_name", "=", report_name), ("report_type", "=", report_type)],
|
||||
# # limit=1,
|
||||
# # )
|
||||
# # .report_action(self, data=data)
|
||||
# # )
|
||||
# def _print_report(self, report_type):
|
||||
# self.ensure_one()
|
||||
# data = self._prepare_report_general_ledger()
|
||||
# report = self.env["ir.actions.report"].search(
|
||||
# [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
|
||||
# # report.report_name='Test'
|
||||
# # report.headers.add('Content-Disposition', 'attachment; filename="Test.pdf";')
|
||||
# # pdf, _ = request.env.ref('act_revise.action_print_report_general_ledger_qweb').sudo().render_qweb_pdf(self,data=data)
|
||||
# # pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)),('Content-Disposition', 'attachment; filename="%s";' % report_name),]
|
||||
# # return request.make_response(pdf, headers=pdfhttpheaders)
|
||||
# # return (
|
||||
# # self.env["ir.actions.report"]
|
||||
# # .search(
|
||||
# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)],
|
||||
# # limit=1,
|
||||
# # )
|
||||
# # report.report_action(self, data=data)
|
||||
# # )
|
||||
# # name='Test'
|
||||
# if self.partner_ids[0].parent_id:
|
||||
# partner = int(self.partner_ids[0].parent_id.id)
|
||||
# else:
|
||||
# partner = int(self.partner_ids[0].id)
|
||||
# account_data = self.env['account.move.line'].sudo().search([
|
||||
# ('partner_id', '=', partner.id),
|
||||
# ('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')),
|
||||
# ('account_id.non_trade', '=', False),
|
||||
# ('date', '<=', self.date_to),
|
||||
# ('date', '>=', self.date_from)
|
||||
# ])
|
||||
# if not account_data:
|
||||
# raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.')
|
||||
# return {
|
||||
# 'type': 'ir.actions.act_url',
|
||||
# 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
|
||||
# urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
|
||||
# self.company_id.id, partner),
|
||||
# 'target': 'new',
|
||||
# }
|
||||
#
|
||||
# def _prepare_report_general_ledger(self):
|
||||
# self.ensure_one()
|
||||
# return {
|
||||
# "wizard_id": self.id,
|
||||
# "date_from": self.date_from,
|
||||
# "date_to": self.date_to,
|
||||
# "only_posted_moves": self.target_move == "posted",
|
||||
# "hide_account_at_0": self.hide_account_at_0,
|
||||
# "foreign_currency": self.foreign_currency,
|
||||
# "company_id": self.company_id.id,
|
||||
# "account_ids": self.account_ids.ids,
|
||||
# "partner_ids": self.partner_ids.ids,
|
||||
# "grouped_by": self.grouped_by,
|
||||
# "cost_center_ids": self.cost_center_ids.ids,
|
||||
# "show_cost_center": self.show_cost_center,
|
||||
# "journal_ids": self.account_journal_ids.ids,
|
||||
# "centralize": self.centralize,
|
||||
# "fy_start_date": self.fy_start_date,
|
||||
# "unaffected_earnings_account": self.unaffected_earnings_account.id,
|
||||
# "account_financial_report_lang": self.env.lang,
|
||||
# "domain": self._get_account_move_lines_domain(),
|
||||
# }
|
||||
#
|
||||
# def _export(self, report_type):
|
||||
# """Default export is PDF."""
|
||||
# return self._print_report(report_type)
|
||||
#
|
||||
# def _get_atr_from_dict(self, obj_id, data, key):
|
||||
# try:
|
||||
# return data[obj_id][key]
|
||||
# except KeyError:
|
||||
# return data[str(obj_id)][key]
|
||||
#
|
||||
# def numer(self, name):
|
||||
# if name:
|
||||
# numeration = re.findall('\d+$', name)
|
||||
# if numeration: return numeration[0]
|
||||
# return name
|
||||
#
|
||||
# def get_data_format(self, date):
|
||||
# if date and date != 'False':
|
||||
# return dt.ru_strftime(u'%d.%m.%Y Рі.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True)
|
||||
# return ''
|
||||
#
|
||||
# def initials(self, fio):
|
||||
# if fio:
|
||||
# return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip()
|
||||
# return ''
|
||||
#
|
||||
# def rubles(self, sum):
|
||||
# "Transform sum number in rubles to text"
|
||||
# text_rubles = numeral.rubles(int(sum))
|
||||
# copeck = round((sum - int(sum)) * 100)
|
||||
# text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек"))
|
||||
# return ("%s %02d %s") % (text_rubles, copeck, text_copeck)
|
||||
#
|
||||
# def img(self, img, type='png', width=0, height=0):
|
||||
# if width:
|
||||
# width = "width='%spx'" % (width)
|
||||
# else:
|
||||
# width = " "
|
||||
# if height:
|
||||
# height = "height='%spx'" % (height)
|
||||
# else:
|
||||
# height = " "
|
||||
# toreturn = "<img %s %s src='data:image/%s;base64,%s' />" % (
|
||||
# width,
|
||||
# height,
|
||||
# type,
|
||||
# str(pycompat.to_text(img)))
|
||||
# return toreturn
|
||||
#
|
||||
# def get_contract(self):
|
||||
# partner = int(self.partner_ids[0].id)
|
||||
# contract = self.env['partner.contract.customer'].search(
|
||||
# [('partner_id', '=', partner), ('state', '=', 'signed')], limit=1)
|
||||
# if contract:
|
||||
# return contract
|
||||
#
|
||||
# def get_function_partner(self, partner):
|
||||
# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
# if director:
|
||||
# if director.function:
|
||||
# return director.function or 'отсутствует'
|
||||
#
|
||||
# def get_name_partner(self, partner):
|
||||
# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
# if director:
|
||||
# return director.name or 'отсутствует'
|
||||
#
|
||||
# def get_report_filename(self):
|
||||
# today = date.today()
|
||||
# d1 = today.strftime("%d-%m-%Y")
|
||||
# if self.partner_ids[0].parent_id:
|
||||
# p = ''.join(self.partner_ids[0].parent_id.name)
|
||||
# else:
|
||||
# p = ''.join(self.partner_ids[0].name)
|
||||
# # return 'Акт Сверки '+ d1 + ' ' + self.company_id.name+'_'+p
|
||||
# return str(self.company_id.id) + ' - ' + ' ' + d1
|
||||
#
|
||||
# def sorted_lines(self, list):
|
||||
# list = sorted(list, key=lambda k: k.get('date'), reverse=False)
|
||||
# return list
|
@ -1,167 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<!-- GENERAL LEDGER -->
|
||||
<record id="general_ledger_wizard" model="ir.ui.view">
|
||||
<field name="name">Акт сверки</field>
|
||||
<field name="model">general.ledger.act_revise.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group name="main_info">
|
||||
<field
|
||||
name="company_id"
|
||||
options="{'no_create': True}"
|
||||
groups="base.group_multi_company"
|
||||
/>
|
||||
</group>
|
||||
<div invisible= "not_only_one_unaffected_earnings_account==True" >
|
||||
<group name="filters">
|
||||
<group name="date_range">
|
||||
<!-- <field name="date_range_id" />-->
|
||||
<field name="date_from" />
|
||||
<field name="date_to" />
|
||||
<field name="fy_start_date" invisible="1" />
|
||||
<field name="target_move" widget="radio" />
|
||||
</group>
|
||||
<group name="other_filters" invisible="1">
|
||||
<field name="grouped_by" />
|
||||
<field name="centralize" />
|
||||
<field name="hide_account_at_0" />
|
||||
<field name="foreign_currency" />
|
||||
<field name="show_cost_center" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook invisible="1">
|
||||
<page string="Filter accounts">
|
||||
<group name="account_filter" col="4">
|
||||
<label for="account_ids" colspan="4" />
|
||||
<field name="receivable_accounts_only" />
|
||||
<field name="payable_accounts_only" />
|
||||
<label for="account_code_from" string="From Code" />
|
||||
<div>
|
||||
<div class="o_row">
|
||||
<field
|
||||
name="account_code_from"
|
||||
class="oe_inline"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
<span class="oe_inline">To</span>
|
||||
<field
|
||||
name="account_code_to"
|
||||
class="oe_inline"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<field
|
||||
name="account_ids"
|
||||
nolabel="1"
|
||||
widget="many2many_tags"
|
||||
options="{'no_create': True}"
|
||||
colspan="4"
|
||||
/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Filter partners">
|
||||
<field
|
||||
name="partner_ids"
|
||||
nolabel="1"
|
||||
widget="many2many_tags"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
</page>
|
||||
<page
|
||||
string="Filter analytic accounts"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
>
|
||||
<field
|
||||
name="cost_center_ids"
|
||||
nolabel="1"
|
||||
widget="many2many_tags"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
</page>
|
||||
<page string="Additional Filtering">
|
||||
<style>
|
||||
.o_domain_show_selection_button {display: none}
|
||||
</style>
|
||||
<field
|
||||
name="domain"
|
||||
widget="domain"
|
||||
options="{'model': 'account.move.line', 'in_dialog': True}"
|
||||
context="{'skip_search_count': 1}"
|
||||
/>
|
||||
</page>
|
||||
</notebook>
|
||||
</div>
|
||||
<div invisible= "not_only_one_unaffected_earnings_account==False" >
|
||||
<field
|
||||
name="not_only_one_unaffected_earnings_account"
|
||||
invisible="1"
|
||||
/>
|
||||
<group />
|
||||
<h4>
|
||||
General Ledger can be computed only if selected company have
|
||||
only one unaffected earnings account.
|
||||
</h4>
|
||||
<group />
|
||||
</div>
|
||||
<footer>
|
||||
<div invisible= "not_only_one_unaffected_earnings_account==True">
|
||||
<button
|
||||
name="button_export_pdf"
|
||||
string="Печать"
|
||||
type="object"
|
||||
/>
|
||||
<button string="Отмена" class="oe_link" special="cancel" />
|
||||
</div>
|
||||
<div invisible= "not_only_one_unaffected_earnings_account==False" >
|
||||
<button string="Отмена" class="oe_link" special="cancel" />
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <act_window-->
|
||||
<!-- id="action_general_ledger_wizard"-->
|
||||
<!-- name="Акт сверки"-->
|
||||
<!-- res_model="general.ledger.act_revise.wizard"-->
|
||||
<!-- view_mode="form"-->
|
||||
<!-- view_id="general_ledger_wizard"-->
|
||||
<!-- target="new"-->
|
||||
<!-- />-->
|
||||
<!-- <!–Add to res.partner action–>-->
|
||||
<!-- <act_window-->
|
||||
<!-- id="act_action_general_ledger_wizard_partner_relation"-->
|
||||
<!-- name="Печатать акт сверки"-->
|
||||
<!-- res_model="general.ledger.act_revise.wizard"-->
|
||||
<!-- binding_model="res.partner"-->
|
||||
<!-- view_mode="form"-->
|
||||
<!-- context="{-->
|
||||
<!-- 'default_receivable_accounts_only':1,-->
|
||||
<!-- 'default_payable_accounts_only':1,-->
|
||||
<!-- }"-->
|
||||
<!-- groups="account.group_account_manager"-->
|
||||
<!-- target="new"-->
|
||||
<!-- />-->
|
||||
|
||||
<record id="action_general_ledger_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Акт сверки</field>
|
||||
<field name="res_model">general.ledger.act_revise.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="general_ledger_wizard"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record id="act_action_general_ledger_wizard_partner_relation" model="ir.actions.act_window">
|
||||
<field name="name">Печатать акт сверки</field>
|
||||
<field name="res_model">general.ledger.act_revise.wizard</field>
|
||||
<field name="binding_model_id" ref="base.model_res_partner"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{'default_receivable_accounts_only': 1, 'default_payable_accounts_only': 1}</field>
|
||||
<field name="groups_id" eval="[(6, 0, [ref('account.group_account_manager')])]"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</odoo>
|
@ -1,93 +0,0 @@
|
||||
# Base Russian Localization
|
||||
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
|
||||
## Add your files
|
||||
|
||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.inf-centre.ru/mklab-base/l10n-russia/base_russian_localization.git
|
||||
git branch -M v17-dev
|
||||
git push -uf origin v17-dev
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.inf-centre.ru/mklab-base/l10n-russia/base_russian_localization/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
||||
|
||||
## Test and Deploy
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
|
||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
||||
|
||||
***
|
||||
|
||||
# Editing this README
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
|
||||
## Suggestions for a good README
|
||||
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
@ -1,2 +0,0 @@
|
||||
from . import models
|
||||
|
@ -1,28 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': "base_russian_localization",
|
||||
'summary': """
|
||||
Российская локализация: основные отчеты и печатные формы.
|
||||
""",
|
||||
|
||||
'description': """
|
||||
Российская локализация: основные отчеты и печатные формы.
|
||||
|
||||
Для включения модулей:
|
||||
1. Меню Настройки - в боковом меню "Российская локализация"
|
||||
2. Выбирается нужный блок.
|
||||
""",
|
||||
|
||||
'author': "Odoo Community Association (OCA), MK Lab",
|
||||
'website': "https://www.inf-centre.ru/",
|
||||
|
||||
'version': '17.0.1.0.0',
|
||||
'license': 'LGPL-3',
|
||||
'category': 'Uncategorized',
|
||||
|
||||
'depends': [],
|
||||
|
||||
'data': [
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * base_russian_localization
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 17.0+e-20240904\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-10-29 07:45+0000\n"
|
||||
"PO-Revision-Date: 2024-10-29 07:45+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#. odoo-python
|
||||
#: code:addons/base_russian_localization/models/res_config_settings.py:0
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_act_revise
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
#, python-format
|
||||
msgid "Act revise"
|
||||
msgstr "Акт сверки"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__company_status_rf
|
||||
msgid "Company Status Rf"
|
||||
msgstr "Статус компании"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model:ir.model,name:base_russian_localization.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr "Параметры конфигурации"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#. odoo-python
|
||||
#: code:addons/base_russian_localization/models/res_config_settings.py:0
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_fehu_base_consent
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
#, python-format
|
||||
msgid "Consent"
|
||||
msgstr "Доверенность"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#. odoo-python
|
||||
#: code:addons/base_russian_localization/models/res_config_settings.py:0
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_contract
|
||||
#, python-format
|
||||
msgid "Contract"
|
||||
msgstr "Договор"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Contracts"
|
||||
msgstr "Договоры"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Powers of attorney"
|
||||
msgstr "Доверенность на получение ТМЦ"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#. odoo-python
|
||||
#: code:addons/base_russian_localization/models/res_config_settings.py:0
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_l10n_ru_doc
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
#, python-format
|
||||
msgid "Print forms"
|
||||
msgstr "Печатные формы"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Report act revise"
|
||||
msgstr "Отчет Акт сверки"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Report contract"
|
||||
msgstr "Договоры"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Report report_xml"
|
||||
msgstr "УПД в формате xml для ЭДО"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#. odoo-python
|
||||
#: code:addons/base_russian_localization/models/res_config_settings.py:0
|
||||
#: model:ir.model.fields,field_description:base_russian_localization.field_res_config_settings__module_report_xml
|
||||
#, python-format
|
||||
msgid "Report_xml"
|
||||
msgstr "Универсальный передаточный документ (УПД) в формате xml для ЭДО"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "Russian Localization"
|
||||
msgstr "Российская локализация"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "UPD xml"
|
||||
msgstr "УПД в формате xml для ЭДО"
|
||||
|
||||
#. module: base_russian_localization
|
||||
#: model_terms:ir.ui.view,arch_db:base_russian_localization.res_config_settings_view_form
|
||||
msgid "print_forms"
|
||||
msgstr "Печатные формы документов"
|
@ -1,4 +0,0 @@
|
||||
from . import res_config_settings
|
||||
|
||||
|
||||
|
@ -1,30 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
module_act_revise = fields.Boolean(_("Act revise"))
|
||||
module_contract = fields.Boolean(_("Contract"))
|
||||
module_report_xml = fields.Boolean(_("Report_xml"))
|
||||
module_l10n_ru_doc = fields.Boolean(_("Print forms"))
|
||||
module_fehu_base_consent = fields.Boolean(_("Consent"))
|
||||
company_status_rf = fields.Boolean('', compute='_compute_company_status')
|
||||
|
||||
def _compute_company_status(self):
|
||||
company_state = False
|
||||
if self.env.company:
|
||||
company_state = self.env.company.state_id.code == 'RU'
|
||||
self.company_status_rf = company_state
|
||||
|
||||
@api.onchange('company_status_rf')
|
||||
def _onchange_company_status_rf(self):
|
||||
if self.company_status_rf:
|
||||
self.module_act_revise = False
|
||||
self.module_contract = False
|
||||
self.module_report_xml = False
|
||||
self.module_l10n_ru_doc = False
|
||||
self.module_fehu_base_consent = False
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB |
@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.russian.localization</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="5"/>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="inside">
|
||||
<app data-string="Russian Localization" string="Russian Localization" name="base_russian_localization" img="">
|
||||
<block title="Act revise" name="act_revise_setting_container">
|
||||
<setting id="act_revise" string="Act revise" help="Report act revise"><field name="module_act_revise"/></setting>
|
||||
</block>
|
||||
<block title="Contracts" name="contract_setting_container">
|
||||
<setting id="contract" string="Contracts" help="Report contract"><field name="module_contract"/></setting>
|
||||
</block>
|
||||
<block title="UPD xml" name="upd_xml_setting_container">
|
||||
<setting id="report_xml" string="UPD xml" help="Report report_xml"><field name="module_report_xml"/></setting>
|
||||
</block>
|
||||
|
||||
<block title="Print forms" name="print_forms_setting_container">
|
||||
<setting id="print_forms" string="Print forms" help="print_forms">
|
||||
<field name="module_l10n_ru_doc"/>
|
||||
</setting>
|
||||
</block>
|
||||
<block title="Consent" name="powers_attorney_setting_container">
|
||||
<setting id="powers_attorney" string="Consent" help="Powers of attorney">
|
||||
<field name="module_fehu_base_consent"/>
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
@ -1,3 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
from . import report
|
@ -1,25 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Контракты клиентов',
|
||||
'version': '17.0.2024.02.02',
|
||||
'sequence': 0,
|
||||
'author': 'StarlingSoft',
|
||||
'website': 'https://inf-centre.ru',
|
||||
'depends': [
|
||||
'base',
|
||||
'mail',
|
||||
'account', 'sale', 'sale_management', 'purchase'
|
||||
],
|
||||
'data': [
|
||||
'data/data.xml',
|
||||
'views/contract_customer_view.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'report/report_contract.xml',
|
||||
'report/report_contract_order.xml',
|
||||
'report/report_contract_order1.xml',
|
||||
'report/report_contract_invoce.xml',
|
||||
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="contract_customer_sequence" model="ir.sequence">
|
||||
<field name="name">Договор последовательность клиент</field>
|
||||
<field name="code">partner.contract.customer.sequence</field>
|
||||
<field eval="1" name="number_next"/>
|
||||
<field eval="1" name="number_increment"/>
|
||||
<field eval="True" name="use_date_range"/>
|
||||
<field name="padding">5</field>
|
||||
</record>
|
||||
<record id="contract_supplier_sequence" model="ir.sequence">
|
||||
<field name="name">Договор последовательность поставщик</field>
|
||||
<field name="code">partner.contract.supplier.sequence</field>
|
||||
<field eval="1" name="number_next"/>
|
||||
<field eval="1" name="number_increment"/>
|
||||
<field eval="True" name="use_date_range"/>
|
||||
<field name="padding">5</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
@ -1,2 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import contract_customer, invoice_saleorder, dop_field, crutch_fields_header
|
@ -1,334 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import api, fields, models, exceptions, tools
|
||||
import pymorphy2
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from .crutch_fields_header import IP_CONTACT_HEADER, ENTITY_CONTRACT_HEADER, INDIVIDUAL_CONTRACT_HEADER
|
||||
|
||||
|
||||
class PartnerContractCustomer(models.Model):
|
||||
_name = 'partner.contract.customer'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin', 'mail.render.mixin']
|
||||
|
||||
def get_dateend(self):
|
||||
if self.date_start:
|
||||
six_months = fields.Datetime.from_string(self.date_start) + relativedelta(months=+11)
|
||||
else:
|
||||
six_months = datetime.today() + relativedelta(months=+11)
|
||||
return fields.Datetime.to_string(six_months)
|
||||
|
||||
name = fields.Char(string='Номер')
|
||||
date_start = fields.Date(string='Дата договора', required=True, default=fields.Datetime.now())
|
||||
partner_id = fields.Many2one('res.partner', string='Контрагент', required=True)
|
||||
sec_partner_id = fields.Many2one('res.partner', string='Контрагент как в заказе')
|
||||
company_id = fields.Many2one('res.company', string='Компания', required=True)
|
||||
name_print = fields.Char(string='Имя для печати', compute='_get_name_print')
|
||||
name_print1 = fields.Char(string='Имя для печати, И.П.', compute='_get_name_printip')
|
||||
date_end = fields.Date(string='Дата окончания', required=True, default=get_dateend)
|
||||
name_dirprint = fields.Char(string='Имя нашего директора для печати')
|
||||
name_dirprint1 = fields.Char(string='Имя нашего директора для печати И.П.')
|
||||
lines = fields.One2many('contract.line', 'contract_id', string='Договорные цены')
|
||||
type = fields.Selection(
|
||||
[('customer', 'С покупателем'),
|
||||
('supplier', 'С поставщиком'),
|
||||
('other', 'Прочие расчеты'),
|
||||
|
||||
],
|
||||
string='Тип договора', default='customer', required=True)
|
||||
saleorder_id = fields.Many2one('sale.order', string='Заказ/Сделка')
|
||||
stamp = fields.Boolean(string='Печать и подпись')
|
||||
signed = fields.Boolean(string='Договор подписан')
|
||||
state = fields.Selection(
|
||||
[('draft', 'Черновик'),
|
||||
('progress', 'На согласовании'),
|
||||
('signed', 'Подписан, действует'),
|
||||
('closed', 'Истёк'),
|
||||
],
|
||||
string='Статус', default='draft', group_expand='_expand_states', index=True
|
||||
)
|
||||
is_template = fields.Boolean('Это шаблон')
|
||||
copy_from = fields.Many2one('partner.contract.customer', string='Копировать из этого шаблона')
|
||||
profile_id = fields.Many2one('contract.profile', string='Вид договора', required=True)
|
||||
credit_limit = fields.Float(string='Лимит кредита')
|
||||
guid_1s = fields.Char('Код договора из 1С')
|
||||
buh_code = fields.Char('Код договора из бухгалтерии')
|
||||
payment_term_id = fields.Many2one('account.payment.term', string='Условие оплаты')
|
||||
manager_id = fields.Many2one('res.users', string='Менеджер по продажам')
|
||||
accountant_id = fields.Many2one('res.users', string='Бухгалтер по взаиморасчетам')
|
||||
time_to_delivery_from = fields.Datetime('Время доставки от')
|
||||
time_to_delivery_to = fields.Datetime('Время доставки до')
|
||||
day_of_delivery = fields.Float('Дни доставки')
|
||||
day_of_otgruzki = fields.Float('Дни отгрузки')
|
||||
|
||||
channel_id = fields.Many2one('saleorder.channel', string='Канал продаж')
|
||||
team_id = fields.Many2one('crm.team', string='Команда продаж')
|
||||
order_days_ids = fields.Many2many(comodel_name='contract.day', relation='orderdays', string='Дни доставки',
|
||||
column1='contract_id', column2='day_id')
|
||||
shipment_days_ids = fields.Many2many(comodel_name='contract.day', relation='shipmentdays', string='Дни отгрузки',
|
||||
column1='contract_id',
|
||||
column2='day_id')
|
||||
# Доработка хедера договора
|
||||
partner_type = fields.Selection(string='Тип контрагента', selection=[
|
||||
('person', 'Физ. лицо'),
|
||||
('company_ip', 'ИП'),
|
||||
('company', 'Юр. лицо')
|
||||
], required=True)
|
||||
contract_header = fields.Html('Шапка договора')
|
||||
|
||||
@api.onchange('partner_type')
|
||||
def generate_contract_header(self):
|
||||
self.ensure_one()
|
||||
self.render_model = 'partner.contract.customer'
|
||||
if self.partner_type == 'company_ip':
|
||||
self.contract_header = IP_CONTACT_HEADER
|
||||
elif self.partner_type == 'person':
|
||||
self.contract_header = INDIVIDUAL_CONTRACT_HEADER
|
||||
else:
|
||||
self.contract_header = ENTITY_CONTRACT_HEADER
|
||||
# # Рендер Jinja выражение типа {{object.field}}
|
||||
result = self._render_template(self.contract_header, self.render_model, res_ids=[self.id])
|
||||
result = tools.html_sanitize(result[self.id])
|
||||
self.contract_header = result
|
||||
|
||||
@api.onchange('sec_partner_id')
|
||||
def set_pid(self):
|
||||
self.partner_id = self.sec_partner_id.parent_id if self.sec_partner_id.parent_id else self.sec_partner_id
|
||||
|
||||
def _expand_states(self, states, domain, order):
|
||||
return [key for key, val in type(self).state.selection]
|
||||
|
||||
def copy_it(self):
|
||||
if self.copy_from:
|
||||
for line in self.copy_from.lines:
|
||||
line.copy({'contract_id': self.id})
|
||||
|
||||
def _get_name_print(self):
|
||||
morph = pymorphy2.MorphAnalyzer()
|
||||
self.name_print = False
|
||||
director = self.env['res.partner'].search([('parent_id', '=', self.partner_id.id), ('type', '=', 'director')],
|
||||
limit=1)
|
||||
if director:
|
||||
if len(director.name.split(' ')) == 3:
|
||||
lastname_old, firstname_old, middlename_old = director.name.split(' ')
|
||||
|
||||
if lastname_old:
|
||||
lastname_n = morph.parse(lastname_old)[0]
|
||||
if lastname_n.inflect({'gent'}):
|
||||
lastname_n = lastname_n.inflect({'gent'}).word
|
||||
else:
|
||||
lastname_n = lastname_old
|
||||
else:
|
||||
lastname_n = ''
|
||||
|
||||
if firstname_old:
|
||||
firstname_n = morph.parse(firstname_old)[0]
|
||||
firstname_n = firstname_n.inflect({'gent'}).word
|
||||
else:
|
||||
firstname_n = ''
|
||||
|
||||
if middlename_old:
|
||||
middlename_n = morph.parse(middlename_old)[0]
|
||||
middlename_n = middlename_n.inflect({'gent'}).word
|
||||
else:
|
||||
middlename_n = ''
|
||||
|
||||
name_print = lastname_n + ' ' + firstname_n + ' ' + middlename_n
|
||||
|
||||
self.name_print = name_print.title()
|
||||
|
||||
def _get_name_print1(self):
|
||||
# morph = pymorphy2.MorphAnalyzer()
|
||||
director = self.company_id.chief_id.partner_id if self.company_id.chief_id else False
|
||||
# raise exceptions.UserError(str(director))
|
||||
self.name_dirprint = False
|
||||
if director:
|
||||
if len(director.name.split(' ')) == 3:
|
||||
lastname_old, firstname_old, middlename_old = director.name.split(' ')
|
||||
|
||||
if lastname_old:
|
||||
lastname_n = morph.parse(lastname_old)[0]
|
||||
lastname_n = lastname_n.inflect({'gent'}).word
|
||||
else:
|
||||
lastname_n = ''
|
||||
|
||||
if firstname_old:
|
||||
firstname_n = morph.parse(firstname_old)[0]
|
||||
firstname_n = firstname_n.inflect({'gent'}).word
|
||||
else:
|
||||
firstname_n = ''
|
||||
|
||||
if middlename_old:
|
||||
middlename_n = morph.parse(middlename_old)[0]
|
||||
middlename_n = middlename_n.inflect({'gent'}).word
|
||||
else:
|
||||
middlename_n = ''
|
||||
|
||||
name_print = lastname_n + ' ' + firstname_n + ' ' + middlename_n
|
||||
|
||||
self.name_dirprint = name_print.title()
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
res = super(PartnerContractCustomer, self).create(values)
|
||||
|
||||
if values.get('is_template'):
|
||||
return res
|
||||
|
||||
if values.get('type') == 'customer':
|
||||
sequence_code = 'partner.contract.customer.sequence'
|
||||
elif values.get('type') == 'supplier':
|
||||
sequence_code = 'partner.contract.supplier.sequence'
|
||||
else:
|
||||
return res
|
||||
|
||||
name = self.env['ir.sequence'].next_by_code(sequence_code)
|
||||
|
||||
res.update({
|
||||
'name': name,
|
||||
})
|
||||
|
||||
return res
|
||||
|
||||
# @api.model
|
||||
def write(self, values):
|
||||
|
||||
if 'state' in values:
|
||||
if self.state != values['state']:
|
||||
msg = 'Статус: ' + dict(self._fields['state'].selection).get(self.state) + ' -> ' + dict(
|
||||
self._fields['state'].selection).get(values['state'])
|
||||
self.message_post(body=msg)
|
||||
res = super(PartnerContractCustomer, self).write(values)
|
||||
return res
|
||||
|
||||
def _get_name_print1ip(self):
|
||||
self.name_dirprint1 = self.company_id.chief_id.partner_id.name if self.company_id.chief_id else False
|
||||
|
||||
def _get_name_printip(self):
|
||||
self.name_print1 = False
|
||||
director = self.env['res.partner'].search([('parent_id', '=', self.partner_id.id), ('type', '=', 'director')],
|
||||
limit=1)
|
||||
if director:
|
||||
self.name_print1 = director.name
|
||||
|
||||
def print_supp(self):
|
||||
# self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'})
|
||||
return self.env['report'].get_action(self, 'mta_base.action_mtacontractsupp_report')
|
||||
|
||||
def print_contract_cust(self):
|
||||
if self.saleorder_id:
|
||||
return self.saleorder_id.print_contract()
|
||||
else:
|
||||
raise exceptions.UserError(
|
||||
'Вы не можете напечатать договор с Клиентом, потому что нет связи с Заказом. Нужно зайти в Заказ и привязать этот договор.')
|
||||
|
||||
def contract_action_confirm(self):
|
||||
if self.state == 'draft':
|
||||
self.state = 'progress'
|
||||
elif self.state == 'progress':
|
||||
self.state = 'signed'
|
||||
|
||||
def contract_in_draft(self):
|
||||
self.state = 'draft'
|
||||
|
||||
@api.onchange('name')
|
||||
def set_comp_and_partn(self):
|
||||
context = self._context
|
||||
order_id = context.get('sale_order_id')
|
||||
if order_id:
|
||||
sale_order = self.env['sale.order'].browse(order_id)
|
||||
|
||||
self.company_id = sale_order.company_id
|
||||
self.partner_id = sale_order.partner_id
|
||||
|
||||
@api.onchange('profile_id')
|
||||
def set_payment(self):
|
||||
if self.profile_id.payment_term_id:
|
||||
self.payment_term_id = self.profile_id.payment_term_id
|
||||
|
||||
# @api.constrains('name')
|
||||
def check_name(self):
|
||||
obj = self.search([('name', '=', self.name), ('id', '!=', self.id), ('state', '!=', 'closed')])
|
||||
if obj:
|
||||
raise exceptions.ValidationError('Договор с таким номером уже существует')
|
||||
|
||||
"""
|
||||
@api.constrains('profile_id')
|
||||
def check_profile_id(self):
|
||||
contracts = self.search([('partner_id', '=', self.partner_id.id), ('id', '!=', self.id)])
|
||||
if contracts:
|
||||
profiles_in_contracts = contracts.profile_id
|
||||
# raise exceptions.ValidationError(profiles_in_contracts.ids)
|
||||
if profiles_in_contracts:
|
||||
ads = self.env['contract.allowed.profiles'].search(
|
||||
[('allowed_profiles', 'in', profiles_in_contracts.ids)])
|
||||
if ads:
|
||||
raise exceptions.ValidationError((self.profile_id.name, ads.name))
|
||||
# raise exceptions.ValidationError(contracts)
|
||||
"""
|
||||
|
||||
|
||||
class Partner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
contract_count = fields.Integer(string='Договоры', compute='get_count_contract')
|
||||
pol = fields.Selection(string="Пол", selection=[('m', 'Муж.'), ('j', 'Жен'), ], required=False)
|
||||
type = fields.Selection(selection_add=[('director', 'Директор')])
|
||||
|
||||
def get_count_contract(self):
|
||||
contract = self.env['partner.contract.customer']
|
||||
self.contract_count = contract.search_count([('partner_id', '=', self.id)])
|
||||
|
||||
def action_view_contract(self):
|
||||
action = self.env.ref('contract.contract_customer_action').read()[0]
|
||||
|
||||
action['domain'] = [('partner_id', '=', self.id)]
|
||||
|
||||
return action
|
||||
|
||||
|
||||
class ContractLine(models.Model):
|
||||
_name = 'contract.line'
|
||||
contract_id = fields.Many2one('partner.contract.customer', string='Order Reference', required=True,
|
||||
ondelete='cascade', index=True, copy=False)
|
||||
_order = "sequence desc"
|
||||
# name = fields.Text(string='Название для договора')
|
||||
# price_unit = fields.Float('Цена', default=0.0)
|
||||
# product_uom = fields.Many2one('uom.uom', string='Единица измерения')
|
||||
# product_id = fields.Many2one('product.product', string='Услуга', domain=[('sale_ok', '=', True)], change_default=True, ondelete='restrict')
|
||||
sequence = fields.Integer('Порядок')
|
||||
name = fields.Char('Номер пункта')
|
||||
punct = fields.Html('Текст пункта')
|
||||
|
||||
@api.onchange('product_id')
|
||||
def set_name(self):
|
||||
self.name = self.product_id.name
|
||||
|
||||
|
||||
class AllowedProfiles(models.Model):
|
||||
_name = 'contract.allowed.profiles'
|
||||
name = fields.Char(string='Одновременно включены следующие виды договоров:')
|
||||
allowed_profiles = fields.Many2many('contract.profile', string='Виды договоров', required=True)
|
||||
|
||||
@api.onchange('allowed_profiles')
|
||||
def set_name(self):
|
||||
self.name = ''
|
||||
for profile in self.allowed_profiles:
|
||||
self.name += profile.name + ' + '
|
||||
if self.name:
|
||||
if self.name[-2] == '+':
|
||||
self.name = self.name[:-2]
|
||||
|
||||
|
||||
class ContractProfile(models.Model):
|
||||
_name = 'contract.profile'
|
||||
name = fields.Char(string='Вид договора', required=True)
|
||||
payable_account_id = fields.Many2one('account.account', string='Счет кредиторской задолженности', required=True)
|
||||
receivable_account_id = fields.Many2one('account.account', string='Счет дебиторской задолженности', required=True)
|
||||
max_receivable_id = fields.Float(string='Максимальная деб. задолженность', required=True)
|
||||
payment_term_id = fields.Many2one('account.payment.term', string='Условие оплаты', required=True)
|
||||
journal_id = fields.Many2one('account.journal', string='Журнал', required=True)
|
||||
|
||||
|
||||
class ContractDay(models.Model):
|
||||
_name = 'contract.day'
|
||||
name = fields.Char('День')
|
@ -1,33 +0,0 @@
|
||||
ENTITY_CONTRACT_HEADER = """
|
||||
<b>{{object.company_id.partner_id.name}}</b>,
|
||||
именуемое в дальнейшем <b>«Поставщик»</b>, в лице
|
||||
{{(object.company_id.chief_id.partner_id.function or '').lower()}}
|
||||
{{(object.name_dirprint1 or '').title()}},
|
||||
действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и <b>{{object.partner_id.name or ''}}</b>,
|
||||
именуемое в дальнейшем <b>«Покупатель»</b>, в лице
|
||||
{{(object.get_function_partner1(object.partner_id.id) or '').lower()}}
|
||||
{{(object.name_print1 or '').title()}}, действующего на основании устава общества, с другой стороны, вместе именуемые в дальнейшем <b>«Стороны»</b> заключили
|
||||
настоящий Договор о нижеследующем:
|
||||
"""
|
||||
IP_CONTACT_HEADER = """
|
||||
<b>{{object.company_id.partner_id.name}}</b>,
|
||||
именуемое в дальнейшем <b>«Поставщик»</b>, в лице
|
||||
{{(object.company_id.chief_id.partner_id.function or '').lower()}}
|
||||
{{(object.name_dirprint1 or '').title()}},
|
||||
действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и <b>{{object.partner_id.name or ''}}</b>,
|
||||
именуемое в дальнейшем <b>«Покупатель»</b>, в лице
|
||||
{{(object.get_function_partner1(object.partner_id.id) or '').lower()}}
|
||||
{{(object.name_print1 or '').title()}}, действующего на основании ОГРНИП №{{object.partner_id.ogrn or ''}},
|
||||
с другой стороны, вместе именуемые в дальнейшем <b>«Стороны»</b> заключили
|
||||
настоящий Договор о нижеследующем:
|
||||
"""
|
||||
|
||||
INDIVIDUAL_CONTRACT_HEADER = """
|
||||
<b>{{object.company_id.partner_id.name}}</b>,
|
||||
именуемое в дальнейшем <b>«Поставщик»</b>, в лице
|
||||
{{(object.company_id.chief_id.partner_id.function or '').lower()}}
|
||||
{{(object.name_dirprint1 or '').title()}},
|
||||
действующего на основании ОГРНИП № {{object.company_id.company_registry or ''}}, с одной стороны, и <b>{{object.partner_id.name or ''}}</b>,
|
||||
именуемое в дальнейшем <b>«Покупатель»</b>, вместе именуемые в дальнейшем <b>«Стороны»</b> заключили
|
||||
настоящий Договор о нижеследующем:
|
||||
"""
|
@ -1,353 +0,0 @@
|
||||
from odoo import api, fields, models, exceptions
|
||||
from datetime import datetime
|
||||
import re
|
||||
import pymorphy2
|
||||
from odoo.tools import pycompat
|
||||
|
||||
FRACTIONS = (
|
||||
(u"десятая", u"десятых", u"десятых"),
|
||||
(u"сотая", u"сотых", u"сотых"),
|
||||
(u"тысячная", u"тысячных", u"тысячных"),
|
||||
(u"десятитысячная", u"десятитысячных", u"десятитысячных"),
|
||||
(u"стотысячная", u"стотысячных", u"стотысячных"),
|
||||
(u"миллионная", u"милллионных", u"милллионных"),
|
||||
(u"десятимиллионная", u"десятимилллионных", u"десятимиллионных"),
|
||||
(u"стомиллионная", u"стомилллионных", u"стомиллионных"),
|
||||
(u"миллиардная", u"миллиардных", u"миллиардных"),
|
||||
)
|
||||
|
||||
ONES = {
|
||||
0: (u"", u"", u""),
|
||||
1: (u"один", u"одна", u"одно"),
|
||||
2: (u"два", u"две", u"два"),
|
||||
3: (u"три", u"три", u"три"),
|
||||
4: (u"четыре", u"четыре", u"четыре"),
|
||||
5: (u"пять", u"пять", u"пять"),
|
||||
6: (u"шесть", u"шесть", u"шесть"),
|
||||
7: (u"семь", u"семь", u"семь"),
|
||||
8: (u"восемь", u"восемь", u"восемь"),
|
||||
9: (u"девять", u"девять", u"девять"),
|
||||
}
|
||||
|
||||
TENS = {
|
||||
0: u"",
|
||||
10: u"десять",
|
||||
11: u"одиннадцать",
|
||||
12: u"двенадцать",
|
||||
13: u"тринадцать",
|
||||
14: u"четырнадцать",
|
||||
15: u"пятнадцать",
|
||||
16: u"шестнадцать",
|
||||
17: u"семнадцать",
|
||||
18: u"восемнадцать",
|
||||
19: u"девятнадцать",
|
||||
2: u"двадцать",
|
||||
3: u"тридцать",
|
||||
4: u"сорок",
|
||||
5: u"пятьдесят",
|
||||
6: u"шестьдесят",
|
||||
7: u"семьдесят",
|
||||
8: u"восемьдесят",
|
||||
9: u"девяносто",
|
||||
}
|
||||
|
||||
HUNDREDS = {
|
||||
0: u"",
|
||||
1: u"сто",
|
||||
2: u"двести",
|
||||
3: u"триста",
|
||||
4: u"четыреста",
|
||||
5: u"пятьсот",
|
||||
6: u"шестьсот",
|
||||
7: u"семьсот",
|
||||
8: u"восемьсот",
|
||||
9: u"девятьсот",
|
||||
}
|
||||
|
||||
MALE = 1
|
||||
FEMALE = 2
|
||||
|
||||
import operator
|
||||
import sys
|
||||
import types
|
||||
|
||||
PY2 = sys.version_info[0] == 2
|
||||
PY3 = sys.version_info[0] == 3
|
||||
|
||||
if PY3:
|
||||
string_types = str,
|
||||
integer_types = int,
|
||||
class_types = type,
|
||||
text_type = str
|
||||
binary_type = bytes
|
||||
|
||||
MAXSIZE = sys.maxsize
|
||||
else:
|
||||
string_types = basestring,
|
||||
integer_types = (int, long)
|
||||
class_types = (type, types.ClassType)
|
||||
text_type = unicode
|
||||
binary_type = str
|
||||
|
||||
|
||||
class Partner_Bank(models.Model):
|
||||
_inherit = 'res.partner.bank'
|
||||
bank_corr_acc = fields.Char('Кор.счет')
|
||||
|
||||
|
||||
# class Bank(models.Model):
|
||||
# _inherit = 'res.bank'
|
||||
|
||||
# corr_acc = fields.Char('Corresponding account', size=64)
|
||||
|
||||
# class Users(models.Model):
|
||||
# _inherit = 'res.users'
|
||||
|
||||
# facsimile = fields.Binary("Facsimile")
|
||||
|
||||
class Company(models.Model):
|
||||
_inherit = 'res.company'
|
||||
|
||||
inn = fields.Char(related='partner_id.inn', readonly=False)
|
||||
kpp = fields.Char(related='partner_id.kpp', readonly=False)
|
||||
okpo = fields.Char(related='partner_id.okpo', readonly=False)
|
||||
chief_id = fields.Many2one('res.users', 'Имя директора')
|
||||
stamp = fields.Binary("Stamp")
|
||||
|
||||
|
||||
class Partner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
ogrn = fields.Char('ОГРН')
|
||||
okpo = fields.Char('ОКПО')
|
||||
inn = fields.Char('ИНН')
|
||||
kpp = fields.Char('KPP')
|
||||
passport = fields.Char('Паспорт')
|
||||
|
||||
|
||||
class Report_contract_customer(models.Model):
|
||||
_inherit = 'partner.contract.customer'
|
||||
|
||||
def img(self, img, type='png', width=0, height=0):
|
||||
if width:
|
||||
width = "width='%spx'" % (width)
|
||||
else:
|
||||
width = " "
|
||||
if height:
|
||||
height = "height='%spx'" % (height)
|
||||
else:
|
||||
height = " "
|
||||
toreturn = "<img %s %s src='data:image/%s;base64,%s' />" % (
|
||||
width,
|
||||
height,
|
||||
type,
|
||||
str(pycompat.to_text(img)))
|
||||
return toreturn
|
||||
|
||||
def numer(self, name):
|
||||
if name:
|
||||
numeration = re.findall('\d+$', name)
|
||||
if numeration: return numeration[0]
|
||||
return ''
|
||||
|
||||
def ru_date(self, date):
|
||||
if date and date != 'False':
|
||||
return dt.ru_strftime(u'"%d" %B %Y года', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True)
|
||||
return ''
|
||||
|
||||
def ru_date2(self, date):
|
||||
if date and date != 'False':
|
||||
return dt.ru_strftime(u'%d %B %Y г.', date=datetime.strptime(str(date), "%Y-%m-%d %H:%M:%S"),
|
||||
inflected=True)
|
||||
return ''
|
||||
|
||||
def in_words(self, number):
|
||||
return numeral.in_words(number)
|
||||
|
||||
def rubles(self, sum):
|
||||
"Transform sum number in rubles to text"
|
||||
text_rubles = self.numeral_rubles(int(sum))
|
||||
copeck = round((sum - int(sum)) * 100)
|
||||
text_copeck = self.numeral_choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек"))
|
||||
return ("%s %02d %s") % (text_rubles, copeck, text_copeck)
|
||||
|
||||
def numeral_rubles(self, amount, zero_for_kopeck=False):
|
||||
self.check_positive(amount)
|
||||
pts = []
|
||||
amount = round(amount, 2)
|
||||
pts.append(self.sum_string(int(amount), 1, (u"рубль", u"рубля", u"рублей")))
|
||||
remainder = self._get_float_remainder(amount, 2)
|
||||
iremainder = int(remainder)
|
||||
|
||||
if iremainder != 0 or zero_for_kopeck:
|
||||
if iremainder < 10 and len(remainder) == 1:
|
||||
iremainder *= 10
|
||||
pts.append(self.sum_string(iremainder, 2,
|
||||
(u"копейка", u"копейки", u"копеек")))
|
||||
return u" ".join(pts)
|
||||
|
||||
def _get_float_remainder(self, fvalue, signs=9):
|
||||
self.check_positive(fvalue)
|
||||
if isinstance(fvalue, integer_types):
|
||||
return "0"
|
||||
if isinstance(fvalue, Decimal) and fvalue.as_tuple()[2] == 0:
|
||||
return "0"
|
||||
|
||||
def sum_string(self, amount, gender, items=None):
|
||||
if isinstance(items, text_type):
|
||||
items = split_values(items)
|
||||
if items is None:
|
||||
items = (u"", u"", u"")
|
||||
try:
|
||||
one_item, two_items, five_items = items
|
||||
except ValueError:
|
||||
raise ValueError("Items must be 3-element sequence")
|
||||
self.check_positive(amount)
|
||||
if amount == 0:
|
||||
return u"ноль %s" % five_items
|
||||
into = u''
|
||||
tmp_val = amount
|
||||
into, tmp_val = self._sum_string_fn(into, tmp_val, gender, items)
|
||||
into, tmp_val = self._sum_string_fn(into, tmp_val, FEMALE,
|
||||
(u"тысяча", u"тысячи", u"тысяч"))
|
||||
into, tmp_val = self._sum_string_fn(into, tmp_val, MALE,
|
||||
(u"миллион", u"миллиона", u"миллионов"))
|
||||
into, tmp_val = self._sum_string_fn(into, tmp_val, MALE,
|
||||
(u"миллиард", u"миллиарда", u"миллиардов"))
|
||||
if tmp_val == 0:
|
||||
return into
|
||||
else:
|
||||
raise ValueError("Cannot operand with numbers bigger than 10**11")
|
||||
|
||||
def _sum_string_fn(self, into, tmp_val, gender, items=None):
|
||||
if items is None:
|
||||
items = (u"", u"", u"")
|
||||
one_item, two_items, five_items = items
|
||||
self.check_positive(tmp_val)
|
||||
if tmp_val == 0:
|
||||
return into, tmp_val
|
||||
words = []
|
||||
rest = tmp_val % 1000
|
||||
tmp_val = tmp_val // 1000
|
||||
if rest == 0:
|
||||
if into == u"":
|
||||
into = u"%s " % five_items
|
||||
return into, tmp_val
|
||||
end_word = five_items
|
||||
words.append(HUNDREDS[rest // 100])
|
||||
rest = rest % 100
|
||||
rest1 = rest // 10
|
||||
tens = rest1 == 1 and TENS[rest] or TENS[rest1]
|
||||
words.append(tens)
|
||||
if rest1 < 1 or rest1 > 1:
|
||||
amount = rest % 10
|
||||
end_word = self.numeral_choose_plural(amount, items)
|
||||
words.append(ONES[amount][gender - 1])
|
||||
words.append(end_word)
|
||||
words.append(into)
|
||||
words = filter(lambda x: len(x) > 0, words)
|
||||
return u" ".join(words).strip(), tmp_val
|
||||
|
||||
def check_positive(self, value, strict=False):
|
||||
if not strict and value < 0:
|
||||
raise ValueError("Value must be positive or zero, not %s" % str(value))
|
||||
if strict and value <= 0:
|
||||
raise ValueError("Value must be positive, not %s" % str(value))
|
||||
|
||||
def numeral_choose_plural(self, amount, variants):
|
||||
if isinstance(variants, text_type):
|
||||
variants = split_values(variants)
|
||||
self.check_length(variants, 3)
|
||||
amount = abs(amount)
|
||||
if amount % 10 == 1 and amount % 100 != 11:
|
||||
variant = 0
|
||||
elif amount % 10 >= 2 and amount % 10 <= 4 and \
|
||||
(amount % 100 < 10 or amount % 100 >= 20):
|
||||
variant = 1
|
||||
else:
|
||||
variant = 2
|
||||
return variants[variant]
|
||||
|
||||
def check_length(self, value, length):
|
||||
_length = len(value)
|
||||
if _length != length:
|
||||
raise ValueError("length must be %d, not %d" % \
|
||||
(length, _length))
|
||||
|
||||
def initials(self, fio):
|
||||
if fio:
|
||||
return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip()
|
||||
return ''
|
||||
|
||||
def address(self, partner):
|
||||
repr = []
|
||||
if partner.zip: repr.append(partner.zip)
|
||||
if partner.city: repr.append(partner.city)
|
||||
if partner.street: repr.append(partner.street)
|
||||
if partner.street2: repr.append(partner.street2)
|
||||
return ', '.join(repr)
|
||||
|
||||
def address_delivery(self, partner):
|
||||
if partner:
|
||||
addr = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'delivery')], limit=1)
|
||||
repr = []
|
||||
if addr:
|
||||
if addr.zip: repr.append(addr.zip)
|
||||
if addr.city: repr.append(addr.city)
|
||||
if addr.street: repr.append(addr.street)
|
||||
if addr.street2: repr.append(addr.street2)
|
||||
return ', '.join(repr)
|
||||
|
||||
def get_function_print(self, function):
|
||||
morph = pymorphy2.MorphAnalyzer()
|
||||
if function:
|
||||
f = morph.parse(function)[0]
|
||||
f = f.inflect({'gent'}).word
|
||||
return f.title()
|
||||
|
||||
def get_function_partnerip(self, partner):
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
if director:
|
||||
if director.function:
|
||||
return director.function
|
||||
|
||||
def get_function_partner(self, partner):
|
||||
res = []
|
||||
morph = pymorphy2.MorphAnalyzer()
|
||||
if partner:
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
if director:
|
||||
if director.function:
|
||||
list_f = str(director.function).split(' ')
|
||||
for func in list_f:
|
||||
f = morph.parse(func)[0]
|
||||
f = f.inflect({'gent'}).word
|
||||
res.append(f)
|
||||
return ' '.join(res)
|
||||
|
||||
def get_function_partner1(self, partner):
|
||||
if partner:
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
|
||||
if director:
|
||||
if director.function:
|
||||
return director.function
|
||||
|
||||
def get_date_text(self, date):
|
||||
month_list = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября',
|
||||
'ноября', 'декабря']
|
||||
if date:
|
||||
date_list = str(date).split('-')
|
||||
if date_list[0] and date_list[1] and date_list[2]:
|
||||
return ('"' + date_list[2] + '" ' + month_list[int(date_list[1]) - 1] + ' ' + date_list[0] + ' г.')
|
||||
|
||||
def get_bank(self, partner):
|
||||
repr = []
|
||||
bank = None
|
||||
if partner.bank_ids:
|
||||
bank = partner.bank_ids[0]
|
||||
elif partner.parent_id.bank_ids:
|
||||
bank = partner.parent_id.bank_ids[0]
|
||||
if bank and bank.bank_name: repr.append(bank.bank_name)
|
||||
if bank and bank.acc_number: repr.append(u"Р/счет " + bank.acc_number)
|
||||
if bank and bank.bank_bic: repr.append(u"БИК " + bank.bank_bic)
|
||||
if bank and bank.bank_corr_acc: repr.append(u"к/с " + bank.bank_corr_acc)
|
||||
return '<br/>'.join(repr)
|
@ -1,128 +0,0 @@
|
||||
from odoo import api, fields, models, exceptions
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class contract_sale_order(models.Model):
|
||||
_inherit = 'sale.order'
|
||||
mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора')
|
||||
sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid')
|
||||
stamp = fields.Boolean(string='Печать и подпись', related='mt_contractid.stamp')
|
||||
|
||||
@api.depends('partner_id')
|
||||
def get_pid(self):
|
||||
for s in self:
|
||||
s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id
|
||||
|
||||
@api.onchange('mt_contractid')
|
||||
def set_ons(self):
|
||||
if self.mt_contractid:
|
||||
self.payment_term_id = self.mt_contractid.payment_term_id
|
||||
|
||||
@api.constrains('state')
|
||||
def late_payment_check(self):
|
||||
if self.mt_contractid:
|
||||
if self.state == 'sale':
|
||||
late_invoices_count = 0
|
||||
max_receivable = self.mt_contractid.profile_id.max_receivable_id # макс. деб. задолженность в договоре
|
||||
# ищу просроченные инвойсы контрагента указанного в заказе со стейтом "Подтверждено"
|
||||
invoices_obj = self.env['account.move'].search([('partner_id', '=', self.partner_id.id),
|
||||
('state', '=', 'posted'),
|
||||
('invoice_date_due', '<', datetime.now().date())])
|
||||
|
||||
for invoice in invoices_obj:
|
||||
late_invoices_count += invoice.amount_residual # складываю деб. задолженность по просроченным инвойсам
|
||||
|
||||
if late_invoices_count > max_receivable:
|
||||
raise exceptions.ValidationError(
|
||||
f'Нельзя подтвердить заказ, так как у контрагента {self.sec_partner_id.name} нарушено '
|
||||
f'условие по дебиторской задолженности.\n\n'
|
||||
f'Контрагент {self.sec_partner_id.name} должен {late_invoices_count}руб.\n'
|
||||
f'Максимальная дебиторская задолженность указанная в '
|
||||
f'договоре №{self.mt_contractid.name} - {max_receivable}руб.\n\n'
|
||||
f'Проверьте следующие неоплаченные счета контрагента:\n'
|
||||
f'{", ".join([invoice.name for invoice in invoices_obj])}')
|
||||
|
||||
# при выбора счета "Обычный счет"
|
||||
@api.model
|
||||
def _create_invoices(self, grouped=False, final=False, date=None):
|
||||
res = super(contract_sale_order, self)._create_invoices(grouped, final, date)
|
||||
if self.mt_contractid:
|
||||
res.write({'mt_contractid': self.mt_contractid,
|
||||
'journal_id': self.mt_contractid.profile_id.journal_id})
|
||||
# 'invoice_payment_term_id': self.mt_contractid.profile_id.payment_term_id
|
||||
# 'line_ids': [(0, 0, {
|
||||
# 'account_id': self.mt_contractid.profile_id.receivable_account_id.id})]
|
||||
return res
|
||||
|
||||
|
||||
class ContractCreateInvoice(models.TransientModel):
|
||||
_inherit = 'sale.advance.payment.inv'
|
||||
|
||||
# при выбора счета "Авансовый платеж"
|
||||
@api.model
|
||||
def _create_invoice(self, order, so_line, amount):
|
||||
res = super(ContractCreateInvoice, self)._create_invoice(order, so_line, amount)
|
||||
if order.mt_contractid:
|
||||
res.write({'mt_contractid': order.mt_contractid,
|
||||
'journal_id': order.mt_contractid.profile_id.journal_id, })
|
||||
# 'invoice_payment_term_id': order.mt_contractid.profile_id.payment_term_id
|
||||
return res
|
||||
|
||||
|
||||
class contract_invoice(models.Model):
|
||||
_inherit = 'account.move'
|
||||
mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора')
|
||||
sf_number = fields.Char(string='Номер с/ф')
|
||||
osnovanie = fields.Char(string='Основание')
|
||||
sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid')
|
||||
stamp = fields.Boolean(string='Печать и подпись', related='mt_contractid.stamp')
|
||||
|
||||
@api.depends('partner_id')
|
||||
def get_pid(self):
|
||||
for s in self:
|
||||
s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id
|
||||
|
||||
@api.onchange('mt_contractid')
|
||||
def set_ons(self):
|
||||
if self.mt_contractid:
|
||||
self.osnovanie = 'Договор № ' + self.mt_contractid.name + ' от ' + fields.Datetime.from_string(
|
||||
self.mt_contractid.date_start).strftime("%d.%m.%Y")
|
||||
|
||||
@api.constrains('state')
|
||||
def invoice_fields_check(self):
|
||||
for s in self:
|
||||
if s.state == 'posted':
|
||||
if s.mt_contractid:
|
||||
errors_list = []
|
||||
journal_in_contract = s.mt_contractid.profile_id.journal_id
|
||||
payment_term_in_contract = s.mt_contractid.profile_id.payment_term_id
|
||||
receivable_in_contract = s.mt_contractid.profile_id.receivable_account_id
|
||||
|
||||
if journal_in_contract != s.journal_id:
|
||||
errors_list.append(f'Отличается Журнал - [{s.journal_id.name}] '
|
||||
f'и указанный в договоре №{s.mt_contractid.name} '
|
||||
f'Журнал - [{journal_in_contract.name}]\n\n')
|
||||
|
||||
if payment_term_in_contract != s.invoice_payment_term_id:
|
||||
errors_list.append(f'Отличается поле "Условие оплаты" в инвойсе '
|
||||
f'[Условие оплаты - {s.invoice_payment_term_id.name}] '
|
||||
f'и указанный в договоре №{s.mt_contractid.name} '
|
||||
f'[Условие оплаты - {payment_term_in_contract.name}]\n\n')
|
||||
|
||||
if receivable_in_contract not in s.line_ids.account_id:
|
||||
errors_list.append(f'Отличается поле "Счет дебиторской задолженности" в инвойсе '
|
||||
f'и указанный в договоре №{s.mt_contractid.name}')
|
||||
|
||||
if errors_list:
|
||||
raise exceptions.ValidationError(''.join(errors_list))
|
||||
|
||||
|
||||
class contact_purchase_order(models.Model):
|
||||
_inherit = 'purchase.order'
|
||||
mt_contractid = fields.Many2one('partner.contract.customer', string='Номер договора')
|
||||
sec_partner_id = fields.Many2one('res.partner', string='Контрагент', store=True, compute='get_pid')
|
||||
|
||||
@api.depends('partner_id')
|
||||
def get_pid(self):
|
||||
for s in self:
|
||||
s.sec_partner_id = s.partner_id.parent_id if s.partner_id.parent_id else s.partner_id
|
@ -1,2 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import report_contract,report_contract_order,report_contract_invoce
|
@ -1,14 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import api, models
|
||||
|
||||
class ContractCustomerReport(models.AbstractModel):
|
||||
_name = 'contract.customer.report'
|
||||
|
||||
|
||||
def get_report_values(self, docids, data=None):
|
||||
docs = self.env['partner.contract.customer'].browse(docids)
|
||||
return {
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'partner.contract.customer',
|
||||
'docs': docs,
|
||||
}
|
@ -1,398 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="report_contract_customer">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"/>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"/>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"/>
|
||||
<div class="header">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0">
|
||||
<t t-esc="o.company_id.name or ''"/>
|
||||
</td>
|
||||
<td class="R0C1">Договор
|
||||
<t t-esc="o.name or ''"/>
|
||||
от
|
||||
<t
|
||||
t-esc="o.date_start or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="page">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: center; vertical-align: medium;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium;}
|
||||
tr.R0 td.R0C2{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium;}
|
||||
tr.R0 td.R0C3{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium; margin: 40px;}
|
||||
p.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align: center;
|
||||
vertical-align: medium; font-weight: bold;}
|
||||
div.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium;}
|
||||
tr.R0 td.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium;}
|
||||
tr.R0 td.R0C6rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-top: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid; border-right:
|
||||
#000000 1px solid}
|
||||
tr.R0 td.R0C6r{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-right: #000000 1px solid}
|
||||
tr.R0 td.R0C6l{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
text-align: left; vertical-align: medium; border-left: #000000 1px solid;}
|
||||
tr.R0 td.R0C6b{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0C6t{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -30px; left: 80px; }
|
||||
tr.R0 td.R0C6tS { overflow: visible; }
|
||||
tr.R0 td.R0C6tS span { position: relative; }
|
||||
tr.R0 td.R0C6tS span img { position: absolute; width: 140px; top: -40px; left: -200px; }
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: auto;">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">Договор №
|
||||
<t t-esc="o.name"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">на поставку продукции</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1">
|
||||
<t t-esc="company.partner_id.city"/>
|
||||
</td>
|
||||
<td class="R0C2">
|
||||
<t t-esc="o.get_date_text(o.date_start)"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="2">
|
||||
<span>
|
||||
<t t-raw="o.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<!--t t-foreach="o.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="2"><t t-esc="line.name"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"><span><t t-raw="line.punct"/></span></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"></td>
|
||||
</tr>
|
||||
</t-->
|
||||
</tbody>
|
||||
</table>
|
||||
<t t-foreach="o.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<p class="R0C4">
|
||||
<t t-esc="line.name or ''"/>
|
||||
</p>
|
||||
<div class="R0C5">
|
||||
<span>
|
||||
<t t-raw="line.punct or ''"/>
|
||||
</span>
|
||||
</div>
|
||||
</t>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">
|
||||
<t t-esc="o.company_id.name or ''"/>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">
|
||||
<t t-esc="o.partner_id.name or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН
|
||||
<t t-esc="o.partner_id.inn or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<!-- <tr class="R0">-->
|
||||
<!-- <td class="R0C6rl" colspan="3">Расчетный счет:</td>-->
|
||||
<!-- <td class="R0C6rl" colspan="3">Расчетный счет:</td>-->
|
||||
<!-- </tr>-->
|
||||
<!-- <tr class="R0">-->
|
||||
<!-- <td class="R0C6l" colspan="3">-->
|
||||
<!-- <t t-raw="o.get_bank(o.company_id.partner_id) or ''"/>-->
|
||||
<!-- </td>-->
|
||||
<!-- <td class="R0C7rl" colspan="3">-->
|
||||
<!-- <t t-raw="o.get_bank(o.partner_id) or ''"/>-->
|
||||
<!-- </td>-->
|
||||
<!-- </tr>-->
|
||||
<!-- <td class="R0C6tI">-->
|
||||
<!-- <SPAN>-->
|
||||
<!-- <t-->
|
||||
<!-- t-raw="o.stamp and o.img(company.chief_id.facsimile) or ''"/>-->
|
||||
<!-- </SPAN>-->
|
||||
<!-- </td>-->
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 30px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: bottom;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: right; vertical-align: bottom;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: top; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -5px; left: 5px;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0">Подпись Исполнителя</td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t
|
||||
t-raw="o.stamp and o.img(company.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C0"></td>
|
||||
<td class="R0C1">Подпись Заказчика</td>
|
||||
<td class="R0C6tI"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-xs-3 pull-right">
|
||||
<small style="font-size:18px;">
|
||||
<span>Страница</span>
|
||||
<span class="page"/>
|
||||
из
|
||||
<span class="topage"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<record id="paperformat_a4" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">15</field>
|
||||
<field name="margin_bottom">30</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_contract_customer" model="ir.actions.report">
|
||||
<field name="name">Договор</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">contract.report_contract_customer</field>
|
||||
<field name="report_file">contract.report_contract_customer</field>
|
||||
<field name="print_report_name">'Договор - %s' % (object.name)</field>
|
||||
<field name="binding_model_id" ref="contract.model_partner_contract_customer" />
|
||||
<field name="paperformat_id" ref="paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
@ -1,15 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
class ContractCustomerReportOrder(models.AbstractModel):
|
||||
_name = 'contract.customer.report_invoce'
|
||||
|
||||
|
||||
def get_report_values(self, docids, data=None):
|
||||
docs = self.env['account.move'].browse(docids)
|
||||
return {
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'account.move',
|
||||
'docs': docs,
|
||||
}
|
@ -1,592 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="report_contract_customer_invoce">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"/>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"/>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"/>
|
||||
<div class="header">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C1">Договор <t t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.date_start or ''"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="page">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: center; vertical-align: medium;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium;}
|
||||
tr.R0 td.R0C2{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium;}
|
||||
tr.R0 td.R0C3{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium; margin: 40px;}
|
||||
tr.R0 td.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
start; vertical-align: medium;}
|
||||
p.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align: center;
|
||||
vertical-align: medium; font-weight: bold;}
|
||||
div.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium;}
|
||||
tr.R0 td.R0C6rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-top: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid; border-right:
|
||||
#000000 1px solid}
|
||||
tr.R0 td.R0C6r{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-right: #000000 1px solid}
|
||||
tr.R0 td.R0C6l{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
text-align: left; vertical-align: medium; border-left: #000000 1px solid;}
|
||||
tr.R0 td.R0C6b{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6t{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -30px; left: 80px; }
|
||||
tr.R0 td.R0C6tS { overflow: visible; }
|
||||
tr.R0 td.R0C6tS span { position: relative; }
|
||||
tr.R0 td.R0C6tS span img { position: absolute; width: 140px; top: -40px; left: -200px; }
|
||||
tr.R0 td.R0C8{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C9box{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid; border-top: #000000 1px solid;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: auto;">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">Договор № <t t-esc="o.mt_contractid.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">на поставку продукции</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"><t t-esc="o.mt_contractid.company_id.partner_id.city or ''"/></td>
|
||||
<td class="R0C2"><t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="2">
|
||||
<span>
|
||||
<t t-raw="o.mt_contractid.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<!--t t-foreach="o.mt_contractid.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="2"><t t-esc="line.name"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"><t t-raw="line.punct"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"></td>
|
||||
</tr>
|
||||
</t-->
|
||||
<!--tr class="R0">
|
||||
<td class="R0C4" colspan="2">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr-->
|
||||
</tbody>
|
||||
</table>
|
||||
<t t-foreach="o.mt_contractid.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<p class="R0C4"><t t-esc="line.name or ''"/></p>
|
||||
<div class="R0C5"><span><t t-raw="line.punct or ''"/></span></div>
|
||||
</t>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.partner_id.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.mt_contractid.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН <t
|
||||
t-esc="o.mt_contractid.partner_id.inn or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.mt_contractid.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.mt_contractid.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p style="page-break-before:always;"></p>
|
||||
<!--p style="page-break-after:always"></p>
|
||||
<div style="page-break-after: auto;"><span style="display: none;"> </span></div>
|
||||
<p style="page-break-inside: avoid">
|
||||
<div style="page-break-inside: auto"></div-->
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C8" colspan="8">Приложение<br/>к договору № <t
|
||||
t-esc="o.mt_contractid.name"/><br/>на поставку продукции<br/>от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8">Спецификация № 1</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="4"><t
|
||||
t-esc="o.mt_contractid.company_id.partner_id.city or ''"/></td>
|
||||
<td class="R0C2" colspan="4"><t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="8">
|
||||
<span>
|
||||
<t t-raw="o.mt_contractid.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="8">1. По договору на поставку продукции <t
|
||||
t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/>.
|
||||
Поставщик обязуется поставить, а Покупатель оплатить в полном объеме следующее:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C9box">Номенклатура</td>
|
||||
<!-- <td class="R0C9box">*ГОСТ</td>-->
|
||||
<td class="R0C9box">Ед.изм.</td>
|
||||
<td class="R0C9box">Кол-во</td>
|
||||
<td class="R0C9box">Цена/руб.<br/>без НДС</td>
|
||||
<td class="R0C9box">Стоимость/руб.<br/>без НДС</td>
|
||||
<!-- <td class="R0C9box">НДС</td>-->
|
||||
<!-- <td class="R0C9box">Стоимость/руб.<br/>c НДС</td>-->
|
||||
</tr>
|
||||
<t t-set="invoice_line_ids" t-value="o.invoice_line_ids.filtered(lambda s: 'аванс' not in s.name.lower() and 'депозит' not in s.name.lower())"/>
|
||||
|
||||
<t t-set="quantity" t-value="sum([line.quantity for line in invoice_line_ids])"/>
|
||||
<t t-set="sum_full"
|
||||
t-value="sum([line.quantity*line.price_unit for line in invoice_line_ids])"/>
|
||||
<t t-set="sum_nds"
|
||||
t-value="sum([line.quantity*line.price_unit*1.2 for line in invoice_line_ids])"/>
|
||||
<tr class="R0" t-foreach="invoice_line_ids" t-as="line">
|
||||
<td class="R0C9box"><t t-esc="line.product_id.name or ''"/></td>
|
||||
<!-- <td class="R0C9box"><!–ГОСТ–></td>-->
|
||||
<td class="R0C9box"><t t-esc="line.product_id.uom_id.name or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.quantity or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit*line.quantity or ''"/></td>
|
||||
<!-- <td class="R0C9box">20%</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="line.price_unit*line.quantity*1.2 or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td></td>
|
||||
<!-- <td></td>-->
|
||||
<td>ИТОГО</td>
|
||||
<td class="R0C9box"><t t-esc="quantity or ''"/></td>
|
||||
<td class="R0C9box">x</td>
|
||||
<td class="R0C9box"><t t-esc="sum_full or ''"/></td>
|
||||
<!-- <td class="R0C9box">x</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="sum_nds or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="8">Итого: <t t-esc="sum_full or ''"/> рублей (<t
|
||||
t-esc="o.mt_contractid.rubles(sum_full) or ''"/>). В стоимость продукции входит стоимость
|
||||
тары и стоимость транспортных расходов, связанных с доставкой продукции до станции
|
||||
назначения.<br/>
|
||||
2. Базис поставки (пункт назначения) по отгрузочным реквизитам:<br/>
|
||||
<t t-esc="o.mt_contractid.address_delivery(o.mt_contractid.partner_id.id) or ''"/><br/>
|
||||
Грузополучатель: <t t-esc="o.mt_contractid.partner_id.name or ''"/>, код <t
|
||||
t-esc="o.mt_contractid.partner_id.id or ''"/>, ОКПО <t
|
||||
t-esc="o.mt_contractid.partner_id.okpo or ''"/>.<br/>
|
||||
3. Условия оплаты: <t t-esc="o.invoice_payment_term_id.name or ''"/> согласно
|
||||
выставленному счету Поставщика.<br/>
|
||||
4. Срок отгрузки: <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_end) or ''"/><br/>
|
||||
5. Срок действия настоящей спецификации ограничен и равен сроку отгрузки по условиям
|
||||
данной спецификации.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.partner_id.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.mt_contractid.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН <t
|
||||
t-esc="o.mt_contractid.partner_id.inn or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.mt_contractid.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.mt_contractid.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 30px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: bottom;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: right; vertical-align: bottom;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: top; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -5px; left: 5px;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0">Подпись Исполнителя</td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t
|
||||
t-raw="o.stamp and o.mt_contractid.img(company.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C0"></td>
|
||||
<td class="R0C1">Подпись Заказчика</td>
|
||||
<td class="R0C6tI"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-xs-3 pull-right">
|
||||
<small style="font-size:18px;">
|
||||
<span>Страница</span>
|
||||
<span class="page"/>
|
||||
из
|
||||
<span class="topage"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<record id="paperformat_a4" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">15</field>
|
||||
<field name="margin_bottom">30</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_contract_customer_invoce" model="ir.actions.report">
|
||||
<field name="name">Договор со спецификацией</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">contract.report_contract_customer_invoce</field>
|
||||
<field name="report_file">contract.report_contract_customer_invoce</field>
|
||||
<field name="print_report_name">'Договор со спецификацией - %s' % (object.name)</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
@ -1,18 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
class ContractCustomerReportOrder(models.AbstractModel):
|
||||
_name = 'contract.customer.report_order'
|
||||
|
||||
|
||||
def get_report_values(self, docids, data=None):
|
||||
docs = self.env['sale.order'].browse(docids)
|
||||
return {
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'sale.order',
|
||||
'docs': docs,
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,594 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="report_contract_customer_order">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"/>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"/>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"/>
|
||||
<div class="header">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C1">Договор <t t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.date_start or ''"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="page">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: center; vertical-align: medium;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium;}
|
||||
tr.R0 td.R0C2{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium;}
|
||||
tr.R0 td.R0C3{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium; margin: 40px;}
|
||||
tr.R0 td.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
start; vertical-align: medium;}
|
||||
p.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align: center;
|
||||
vertical-align: medium; font-weight: bold;}
|
||||
div.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium;}
|
||||
tr.R0 td.R0C6rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-top: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid; border-right:
|
||||
#000000 1px solid}
|
||||
tr.R0 td.R0C6r{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-right: #000000 1px solid}
|
||||
tr.R0 td.R0C6l{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
text-align: left; vertical-align: medium; border-left: #000000 1px solid;}
|
||||
tr.R0 td.R0C6b{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6t{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -30px; left: 80px; }
|
||||
tr.R0 td.R0C6tS { overflow: visible; }
|
||||
tr.R0 td.R0C6tS span { position: relative; }
|
||||
tr.R0 td.R0C6tS span img { position: absolute; width: 140px; top: -40px; left: -200px; }
|
||||
tr.R0 td.R0C8{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C9box{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid; border-top: #000000 1px solid;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%;">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">Договор № <t t-esc="o.mt_contractid.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="2">на поставку продукции</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"><t t-esc="o.mt_contractid.company_id.partner_id.city or ''"/></td>
|
||||
<td class="R0C2"><t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="2">
|
||||
<span>
|
||||
<t t-raw="o.mt_contractid.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<!--t t-foreach="o.mt_contractid.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="2"><t t-esc="line.name"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"><t t-raw="line.punct"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="2"></td>
|
||||
</tr>
|
||||
</t-->
|
||||
<!--tr class="R0">
|
||||
<td class="R0C4" colspan="2">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1"></td>
|
||||
<td class="R0C2"></td>
|
||||
</tr-->
|
||||
</tbody>
|
||||
</table>
|
||||
<t t-foreach="o.mt_contractid.lines.sorted(key=lambda r: r.sequence, reverse=False)" t-as="line">
|
||||
<p class="R0C4"><t t-esc="line.name or ''"/></p>
|
||||
<div class="R0C5"><span><t t-raw="line.punct or ''"/></span></div>
|
||||
</t>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.partner_id.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.mt_contractid.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН <t
|
||||
t-esc="o.mt_contractid.partner_id.inn or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.mt_contractid.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.mt_contractid.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p style="page-break-before:always;"></p>
|
||||
<!--p style="page-break-after:always"></p>
|
||||
<div style="page-break-after: auto;"><span style="display: none;"> </span></div>
|
||||
<p style="page-break-inside: avoid">
|
||||
<div style="page-break-inside: auto"></div-->
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C8" colspan="8">Приложение<br/>к договору № <t
|
||||
t-esc="o.mt_contractid.name"/><br/>на поставку продукции<br/>от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8">Спецификация № 1</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="4"><t
|
||||
t-esc="o.mt_contractid.company_id.partner_id.city or ''"/></td>
|
||||
<td class="R0C2" colspan="4"><t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="8">
|
||||
<span>
|
||||
<t t-raw="o.mt_contractid.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="8">1. По договору на поставку продукции <t
|
||||
t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/>.
|
||||
Поставщик обязуется поставить, а Покупатель оплатить в полном объеме следующее:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C9box">Номенклатура</td>
|
||||
<!-- <td class="R0C9box">*ГОСТ</td>-->
|
||||
<td class="R0C9box">Ед.изм.</td>
|
||||
<td class="R0C9box">Кол-во</td>
|
||||
<td class="R0C9box">Цена/руб.<br/>без НДС</td>
|
||||
<td class="R0C9box">Стоимость/руб.<br/>без НДС</td>
|
||||
<!-- <td class="R0C9box">НДС</td>-->
|
||||
<!-- <td class="R0C9box">Стоимость/руб.<br/>c НДС</td>-->
|
||||
</tr>
|
||||
<t t-set="order_line" t-value="o.order_line.filtered(lambda s: 'аванс' not in s.name.lower() and 'депозит' not in s.name.lower())"/>
|
||||
<t t-set="quantity" t-value="sum([line.product_uom_qty for line in order_line])"/>
|
||||
<t t-set="sum_full"
|
||||
t-value="sum([line.product_uom_qty*line.price_unit for line in order_line])"/>
|
||||
<t t-set="sum_nds"
|
||||
t-value="sum([line.product_uom_qty*line.price_unit*1.2 for line in order_line])"/>
|
||||
<tr class="R0" t-foreach="order_line" t-as="line">
|
||||
<td class="R0C9box"><t t-esc="line.product_id.name or ''"/></td>
|
||||
<!-- <td class="R0C9box"><!–ГОСТ–></td>-->
|
||||
<td class="R0C9box"><t t-esc="line.product_id.uom_id.name or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.product_uom_qty or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit*line.product_uom_qty or ''"/></td>
|
||||
<!-- <td class="R0C9box">20%</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="line.price_unit*line.product_uom_qty*1.2 or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td></td>
|
||||
<!-- <td></td>-->
|
||||
<td>ИТОГО</td>
|
||||
<td class="R0C9box"><t t-esc="quantity or ''"/></td>
|
||||
<td class="R0C9box">x</td>
|
||||
<td class="R0C9box"><t t-esc="sum_full or ''"/></td>
|
||||
<!-- <td class="R0C9box">x</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="sum_nds or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="9">Итого: <t t-esc="sum_full or ''"/> рублей (<t
|
||||
t-esc="o.mt_contractid.rubles(sum_full) or ''"/>). В стоимость продукции входит
|
||||
стоимость
|
||||
тары и стоимость транспортных расходов, связанных с доставкой продукции до станции
|
||||
назначения.<br/>
|
||||
2. Базис поставки (пункт назначения) по отгрузочным реквизитам:<br/>
|
||||
<t t-esc="o.mt_contractid.address_delivery(o.mt_contractid.partner_id.id) or ''"/><br/>
|
||||
Грузополучатель: <t t-esc="o.mt_contractid.partner_id.name or ''"/>, код <t
|
||||
t-esc="o.mt_contractid.partner_id.id or ''"/>, ОКПО <t
|
||||
t-esc="o.mt_contractid.partner_id.okpo or ''"/>.<br/>
|
||||
3. Условия оплаты: <t t-esc="o.payment_term_id.name or ''"/> согласно выставленному
|
||||
счету
|
||||
Поставщика.<br/>
|
||||
4. Срок отгрузки: <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_end) or ''"/>
|
||||
<br/>
|
||||
5. Срок действия настоящей спецификации ограничен и равен сроку отгрузки по
|
||||
условиям данной спецификации.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.partner_id.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.mt_contractid.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН <t
|
||||
t-esc="o.mt_contractid.partner_id.inn or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.mt_contractid.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.mt_contractid.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 30px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: bottom;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: right; vertical-align: bottom;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: top; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -5px; left: 5px;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0">Подпись Исполнителя</td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t
|
||||
t-raw="o.stamp and o.mt_contractid.img(company.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C0"></td>
|
||||
<td class="R0C1">Подпись Заказчика</td>
|
||||
<td class="R0C6tI"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-xs-3 pull-right">
|
||||
<small style="font-size:18px;">
|
||||
<span>Страница</span>
|
||||
<span class="page"/>
|
||||
из
|
||||
<span class="topage"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<record id="paperformat_a4" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">15</field>
|
||||
<field name="margin_bottom">30</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_contract_customer_order" model="ir.actions.report">
|
||||
<field name="name">Договор со спецификацией</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">contract.report_contract_customer_order</field>
|
||||
<field name="report_file">contract.report_contract_customer_order</field>
|
||||
<field name="print_report_name">'Договор со спецификацией - %s' % (object.name)</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order" />
|
||||
<field name="paperformat_id" ref="paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
@ -1,406 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="report_contract_customer_order1">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"/>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"/>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"/>
|
||||
<div class="header">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C1">Договор <t t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.date_start or ''"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="page">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 15px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: center; vertical-align: medium;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium;}
|
||||
tr.R0 td.R0C2{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium;}
|
||||
tr.R0 td.R0C3{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium; margin: 40px;}
|
||||
tr.R0 td.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
start; vertical-align: medium;}
|
||||
p.R0C4{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align: center;
|
||||
vertical-align: medium; font-weight: bold;}
|
||||
div.R0C5{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
justify; vertical-align: medium;}
|
||||
tr.R0 td.R0C6rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-top: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid; border-right:
|
||||
#000000 1px solid}
|
||||
tr.R0 td.R0C6r{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-right: #000000 1px solid}
|
||||
tr.R0 td.R0C6l{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
text-align: left; vertical-align: medium; border-left: #000000 1px solid;}
|
||||
tr.R0 td.R0C6b{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6t{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-top: #000000 1px solid;}
|
||||
tr.R0 td.R0C6rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal;
|
||||
font-weight: bold; text-align: left; vertical-align: medium; border-left: #000000 1px solid;
|
||||
border-right: #000000 1px solid; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rtl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid;
|
||||
border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;}
|
||||
tr.R0 td.R0C7rbl{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
left; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: medium; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -30px; left: 80px; }
|
||||
tr.R0 td.R0C6tS { overflow: visible; }
|
||||
tr.R0 td.R0C6tS span { position: relative; }
|
||||
tr.R0 td.R0C6tS span img { position: absolute; width: 140px; top: -40px; left: -200px; }
|
||||
tr.R0 td.R0C8{ font-family: Times new roman; font-size: 11pt; font-style: normal; text-align:
|
||||
right; vertical-align: medium; font-weight: bold;}
|
||||
tr.R0 td.R0C9box{ font-family: Times new roman; font-size: 12pt; font-style: normal; text-align:
|
||||
center; vertical-align: medium; border-left: #000000 1px solid; border-right: #000000 1px solid;
|
||||
border-bottom: #000000 1px solid; border-top: #000000 1px solid;}
|
||||
</STYLE>
|
||||
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C8" colspan="8">Приложение<br/>к договору № <t
|
||||
t-esc="o.mt_contractid.name"/><br/>на поставку продукции<br/>от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8">Спецификация № 1</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="4"><t
|
||||
t-esc="o.mt_contractid.company_id.partner_id.city or ''"/></td>
|
||||
<td class="R0C2" colspan="4"><t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C3" colspan="8">
|
||||
<span>
|
||||
<t t-raw="o.mt_contractid.contract_header or ''"/>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="8">1. По договору на поставку продукции <t
|
||||
t-esc="o.mt_contractid.name or ''"/> от <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_start) or ''"/>.
|
||||
Поставщик обязуется поставить, а Покупатель оплатить в полном объеме следующее:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C9box">Номенклатура</td>
|
||||
<!-- <td class="R0C9box">*ГОСТ</td>-->
|
||||
<td class="R0C9box">Ед.изм.</td>
|
||||
<td class="R0C9box">Кол-во</td>
|
||||
<td class="R0C9box">Цена/руб.<br/>без НДС</td>
|
||||
<td class="R0C9box">Стоимость/руб.<br/>без НДС</td>
|
||||
<!-- <td class="R0C9box">НДС</td>-->
|
||||
<!-- <td class="R0C9box">Стоимость/руб.<br/>c НДС</td>-->
|
||||
</tr>
|
||||
<t t-set="order_line" t-value="o.order_line.filtered(lambda s: 'аванс' not in s.name.lower() and 'депозит' not in s.name.lower())"/>
|
||||
<t t-set="quantity" t-value="sum([line.product_uom_qty for line in order_line])"/>
|
||||
<t t-set="sum_full"
|
||||
t-value="sum([line.product_uom_qty*line.price_unit for line in order_line])"/>
|
||||
<t t-set="sum_nds"
|
||||
t-value="sum([line.product_uom_qty*line.price_unit*1.2 for line in order_line])"/>
|
||||
<tr class="R0" t-foreach="order_line" t-as="line">
|
||||
<td class="R0C9box"><t t-esc="line.product_id.name or ''"/></td>
|
||||
<!-- <td class="R0C9box"><!–ГОСТ–></td>-->
|
||||
<td class="R0C9box"><t t-esc="line.product_id.uom_id.name or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.product_uom_qty or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit or ''"/></td>
|
||||
<td class="R0C9box"><t t-esc="line.price_unit*line.product_uom_qty or ''"/></td>
|
||||
<!-- <td class="R0C9box">20%</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="line.price_unit*line.product_uom_qty*1.2 or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td></td>
|
||||
<!-- <td></td>-->
|
||||
<td>ИТОГО</td>
|
||||
<td class="R0C9box"><t t-esc="quantity or ''"/></td>
|
||||
<td class="R0C9box">x</td>
|
||||
<td class="R0C9box"><t t-esc="sum_full or ''"/></td>
|
||||
<!-- <td class="R0C9box">x</td>-->
|
||||
<!-- <td class="R0C9box"><t t-esc="sum_nds or ''"/></td>-->
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C5" colspan="8">Итого: <t t-esc="sum_full or ''"/> рублей (<t
|
||||
t-esc="o.mt_contractid.rubles(sum_full) or ''"/>). В стоимость продукции входит стоимость
|
||||
тары и стоимость транспортных расходов, связанных с доставкой продукции до станции
|
||||
назначения.<br/>
|
||||
2. Базис поставки (пункт назначения) по отгрузочным реквизитам:<br/>
|
||||
<t t-esc="o.mt_contractid.address_delivery(o.mt_contractid.partner_id.id) or ''"/><br/>
|
||||
Грузополучатель: <t t-esc="o.mt_contractid.partner_id.name or ''"/>, код <t
|
||||
t-esc="o.mt_contractid.partner_id.id or ''"/>, ОКПО <t
|
||||
t-esc="o.mt_contractid.partner_id.okpo or ''"/>.<br/>
|
||||
3. Условия оплаты: <t t-esc="o.payment_term_id.name or ''"/> согласно выставленному счету
|
||||
Поставщика.<br/>
|
||||
4. Срок отгрузки: <t
|
||||
t-esc="o.mt_contractid.get_date_text(o.mt_contractid.date_end) or ''"/><br/>
|
||||
5. Срок действия настоящей спецификации ограничен и равен сроку отгрузки по условиям
|
||||
данной спецификации.
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C0" colspan="8"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; page-break-inside: avoid;">
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="30%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C4" colspan="6">Реквизиты и подписи сторон.</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C1" colspan="6"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rtl" colspan="3">Поставщик:</td>
|
||||
<td class="R0C6rtl" colspan="3">Покупатель:</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.company_id.name or ''"/></td>
|
||||
<td class="R0C6rl" colspan="3"><t t-esc="o.mt_contractid.partner_id.name or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">ИНН
|
||||
<t t-esc="o.mt_contractid.company_id.inn or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">ИНН <t
|
||||
t-esc="o.mt_contractid.partner_id.inn or ''"/></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="2">ОГРН
|
||||
<t t-esc="o.company_id.company_registry or ''"/>
|
||||
</td>
|
||||
<td class="R0C6r" rowspan="2">
|
||||
<t t-esc="o.mt_contractid.name_dirprint1 or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type in ['company', 'company_ip']">
|
||||
<td class="R0C7rl" colspan="3">ОГРН
|
||||
<t t-esc="o.partner_id.ogrn or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3">Паспорт
|
||||
<t t-esc="o.partner_id.passport or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">КПП
|
||||
<t t-esc="o.mt_contractid.company_id.kpp or ''"/>
|
||||
</td>
|
||||
<t t-if="o.mt_contractid.partner_type == 'company'">
|
||||
<td class="R0C7rl" colspan="3">КПП
|
||||
<t t-esc="o.partner_id.kpp or ''"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td class="R0C7rl" colspan="3"></td>
|
||||
</t>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3">Юридический адрес:
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.company_id) or ''"/>
|
||||
</td>
|
||||
<td class="R0C7rl" colspan="3">
|
||||
<t t-esc="o.mt_contractid.address(o.partner_id) or ''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6tS">
|
||||
<SPAN>
|
||||
<t t-raw="o.stamp and o.mt_contractid.img(o.company_id.stamp) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6l"></td>
|
||||
<td class="R0C6b"></td>
|
||||
<td class="R0C6r">
|
||||
<t t-esc="''"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
<td class="R0C6rl" colspan="3"></td>
|
||||
</tr>
|
||||
<tr class="R0">
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
<td class="R0C6rbl" colspan="3"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<STYLE TYPE="text/css">
|
||||
body {background: #ffffff; margin: 0; font-family: Times new roman; font-size: 12pt; font-style:
|
||||
normal;}
|
||||
tr.R0{height: 30px;}
|
||||
tr.R0 td.R0C0{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: bottom;}
|
||||
tr.R0 td.R0C1{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: right; vertical-align: bottom;}
|
||||
tr.R0 td.R0C6tI{ font-family: Times new roman; font-size: 11pt; font-style: normal; font-weight:
|
||||
bold; text-align: left; vertical-align: top; border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R0C6tI { overflow: visible; }
|
||||
tr.R0 td.R0C6tI span { position: relative; }
|
||||
tr.R0 td.R0C6tI span img { position: absolute; width: 100px; top: -5px; left: 5px;}
|
||||
</STYLE>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="width:100%">
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<COL WIDTH="20%"/>
|
||||
<tbody>
|
||||
<tr class="R0">
|
||||
<td class="R0C0">Подпись Исполнителя</td>
|
||||
<td class="R0C6tI">
|
||||
<SPAN>
|
||||
<t
|
||||
t-raw="o.stamp and o.mt_contractid.img(company.chief_id.facsimile) or ''"/>
|
||||
</SPAN>
|
||||
</td>
|
||||
<td class="R0C0"></td>
|
||||
<td class="R0C1">Подпись Заказчика</td>
|
||||
<td class="R0C6tI"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="col-xs-3 pull-right">
|
||||
<small style="font-size:18px;">
|
||||
<span>Страница</span>
|
||||
<span class="page"/>
|
||||
из
|
||||
<span class="topage"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<record id="paperformat_a4" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">15</field>
|
||||
<field name="margin_bottom">30</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_contract_customer_order1" model="ir.actions.report">
|
||||
<field name="name">Спецификация</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">contract.report_contract_customer_order1</field>
|
||||
<field name="report_file">contract.report_contract_customer_order1</field>
|
||||
<field name="print_report_name">'Спецификация - %s' % (object.name)</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order" />
|
||||
<field name="paperformat_id" ref="paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
@ -1,6 +0,0 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_partner_contract_customer,access_partner_contract_customer,model_partner_contract_customer,,1,1,1,1
|
||||
access_contract_profile,access_contract_profile,model_contract_profile,,1,1,1,1
|
||||
access_contract_day,access_contract_day,model_contract_day,,1,1,1,1
|
||||
access_contract_allowed_profiles,access_contract_allowed_profiles,model_contract_allowed_profiles,,1,1,1,1
|
||||
access_partner_contract_customerline,access_partner_contract_customerline,model_contract_line,,1,1,1,1
|
|
@ -1,358 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="contract_customer_form" model="ir.ui.view">
|
||||
<field name="name">Договор</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Договор">
|
||||
<header>
|
||||
<field name="state" widget="statusbar" nolabel="1" clickable="True"/>
|
||||
<button name="contract_action_confirm" string="На согласовании" type="object"
|
||||
invisible="state!='draft'"/>
|
||||
<button name="contract_action_confirm" class="btn-primary" string="Подтвердить" type="object"
|
||||
invisible="state!='progress'"/>
|
||||
<button name="contract_in_draft" string="В черновик" type="object"
|
||||
invisible="state!='signed' and state!='progress'"/>
|
||||
<button name="generate_contract_header" string="Генерация шапки документа"
|
||||
type="object"/>
|
||||
|
||||
</header>
|
||||
<sheet>
|
||||
<h1>
|
||||
<label for="name"/>
|
||||
<field name="name" readonly="state!='draft'"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="date_start" readonly="state!='draft'"/>
|
||||
<field name="date_end" readonly="state!='draft'"/>
|
||||
<field name="type" readonly="state!='draft'"/>
|
||||
<field name="profile_id" readonly="state!='draft'"/>
|
||||
<field name="saleorder_id" areadonly="state!='draft'"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="partner_id" readonly="state!='draft'"/>
|
||||
<field name="partner_type" readonly="state!='draft'"/>
|
||||
<!-- <field name="name_print"/>-->
|
||||
<field name="sec_partner_id" invisible="1"/>
|
||||
<field name="company_id" readonly="state!='draft'"/>
|
||||
<!--<field name="name_dirprint"/>-->
|
||||
<field name="stamp"/>
|
||||
<field name="signed"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="payment_term_id" invisible="1"/>
|
||||
<field name="manager_id"/>
|
||||
<field name="team_id"/>
|
||||
|
||||
<field name="accountant_id"/>
|
||||
<field name="buh_code"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="is_template"/>
|
||||
<field name="copy_from" domain="[('is_template','=',True)]"/>
|
||||
<button name="copy_it" type="object" string="Скопировать пункты из шаблона"
|
||||
invisible="copy_from==False"/>
|
||||
</group>
|
||||
<group>
|
||||
|
||||
<field name="order_days_ids"/>
|
||||
<field name="shipment_days_ids"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="time_to_delivery_from" class="oe_inline" widget="daterange"
|
||||
title="Интервал" options="{'related_end_date': 'time_to_delivery_to'}"/>
|
||||
<field name="time_to_delivery_to" class="oe_inline" widget="daterange"
|
||||
title="Интервал" options="{'related_end_date': 'time_to_delivery_from'}"/>
|
||||
</group>
|
||||
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Пункты договора" name="contract_lines">
|
||||
<field name="lines">
|
||||
<tree editable="bottom">
|
||||
<field name='sequence' widget='handle'/>
|
||||
<field name="name"/>
|
||||
<field name="punct"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Шапка договора" name="contract_header">
|
||||
<field name="contract_header"/>
|
||||
</page>
|
||||
</notebook>
|
||||
|
||||
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
<record id="view_sale_calendar_inherit" model="ir.ui.view">
|
||||
<field name="name">calendar.contract</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="inherit_id" ref="contract.contract_customer_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='team_id']" position="after">
|
||||
<calendar string="Movings" date_start="time_to_delivery_from" date_stop="time_to_delivery_to">
|
||||
<field name="time_to_delivery_from"/>
|
||||
<field name="time_to_delivery_to"/>
|
||||
</calendar>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>-->
|
||||
|
||||
<record id="contract_customer_tree" model="ir.ui.view">
|
||||
<field name="name">Договор</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Договоры">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="date_start"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="contract_customer_search" model="ir.ui.view">
|
||||
<field name="name">Поиск в договорах</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="partner_id" string="Номер или клиент"
|
||||
filter_domain="['|',('partner_id','ilike',self),('name','ilike',self)]"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="company_id"/>
|
||||
<field name="date_start"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="contract_customer_action" model="ir.actions.act_window">
|
||||
<field name="name">Договоры</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">partner.contract.customer</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Нет созданных контрактов
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="contract_customer_action1" model="ir.actions.act_window">
|
||||
<field name="name">Договоры</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">partner.contract.customer</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="domain">[('type', '=', 'supplier')]</field>
|
||||
<field name="help" type="html">
|
||||
|
||||
<p class="oe_view_nocontent_create">
|
||||
Нет созданных контрактов
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="contract_customer_action2" model="ir.actions.act_window">
|
||||
<field name="name">Договоры</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">partner.contract.customer</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="domain">[('type', '=', 'customer')]</field>
|
||||
<field name="help" type="html">
|
||||
|
||||
<p class="oe_view_nocontent_create">
|
||||
Нет созданных контрактов
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="contract_allowed_profiles_action" model="ir.actions.act_window">
|
||||
<field name="name">Настройка одновременно включенных договоров</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">contract.allowed.profiles</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<record id="contract_profile_action" model="ir.actions.act_window">
|
||||
<field name="name">Виды договоров</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">contract.profile</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<record id="contract_profile_view" model="ir.ui.view">
|
||||
<field name="name">view_profile_form</field>
|
||||
<field name="model">contract.profile</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Профиль договора">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="receivable_account_id" domain="[('account_type', '=', 'asset_receivable')]"/>
|
||||
<field name="max_receivable_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="payable_account_id" domain="[('account_type', '=', 'liability_payable')]"/>
|
||||
<field name="payment_term_id"/>
|
||||
<field name="journal_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_partner_form" model="ir.ui.view">
|
||||
<field name="name">view_partner_form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button name="action_view_contract" type="object" class="oe_stat_button" icon="fa-pencil-square-o"
|
||||
context="{'view':'contract_customer_action', 'search_default_open': 1}">
|
||||
<field name="contract_count" widget="statinfo" string="Договоры"/>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='category_id']" position="after">
|
||||
<field name="passport" invisible="is_company==True"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_saleorder_form" model="ir.ui.view">
|
||||
<field name="name">view_saleorder_form</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='partner_id']" position="after">
|
||||
<field name="mt_contractid"
|
||||
domain="[('partner_id','=',sec_partner_id),('company_id','=',company_id)]"
|
||||
context="{'default_sec_partner_id':partner_id,'default_company_id':company_id,'default_type':'customer'}"/>
|
||||
<field name="sec_partner_id" invisible="1"/>
|
||||
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_purchaseorder_formcontr" model="ir.ui.view">
|
||||
<field name="name">view_purchaseorder_formcontr</field>
|
||||
<field name="model">purchase.order</field>
|
||||
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='origin']" position="after">
|
||||
|
||||
<field name="mt_contractid"
|
||||
domain="[('partner_id','=',sec_partner_id),('company_id','=',company_id)]"
|
||||
context="{'default_sec_partner_id':partner_id,'default_company_id':company_id,'default_type':'supplier'}"/>
|
||||
<field name="sec_partner_id" invisible="1"/>
|
||||
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_invoice_form" model="ir.ui.view">
|
||||
<field name="name">view_invoice_form</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="inherit_id" ref="account.view_move_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='payment_reference']" position="after">
|
||||
|
||||
<field name="mt_contractid"
|
||||
domain="[('partner_id','=',sec_partner_id),('company_id','=',company_id)]"
|
||||
context="{'default_sec_partner_id':partner_id,'default_company_id':company_id,'default_type':'customer'}"/>
|
||||
<field name="sec_partner_id" invisible="1"/>
|
||||
<field name="sf_number"/>
|
||||
<field name="osnovanie" invisible="1"/>
|
||||
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="contract_customer_kanban" model="ir.ui.view">
|
||||
<field name="name">Договор</field>
|
||||
<field name="model">partner.contract.customer</field>
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<kanban default_group_by="state">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="profile_id"/>
|
||||
<field name="company_id"/>
|
||||
<field name="type"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="oe_kanban_content">
|
||||
<div>
|
||||
<strong class="o_kanban_record_title">Номер: <b><field
|
||||
name="name"/></b></strong>
|
||||
</div>
|
||||
<div>
|
||||
Контрагент: <b><field name="partner_id"/></b> <br/>
|
||||
Тип: <b><field name="type"/></b> <br/>
|
||||
Вид договора: <b><field name="profile_id"/></b>
|
||||
</div>
|
||||
<div class="o_kanban_record_bottom">
|
||||
Наша компания: <b><field name="company_id"/></b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
||||
|
||||
</field>
|
||||
</record>
|
||||
<menuitem name="Договоры" id="contract.main" parent="sale.sale_menu_root"/>
|
||||
<menuitem name="Договоры" id="contract.contracts" parent="contract.main"
|
||||
action="contract.contract_customer_action2"/>
|
||||
|
||||
<menuitem name="Договоры" id="contract.main1" parent="purchase.menu_purchase_root"/>
|
||||
<menuitem name="Договоры" id="contract.contracts1" parent="contract.main1"
|
||||
action="contract.contract_customer_action1"/>
|
||||
|
||||
<menuitem name="Настройка" id="separator" parent="contract.main"/>
|
||||
<menuitem name="Виды договоров" id="contract_profiles" parent="separator"
|
||||
action="contract.contract_profile_action"/>
|
||||
<menuitem name="Включенные договора" id="contract_profile_setting" parent="separator"
|
||||
action="contract.contract_allowed_profiles_action"/>
|
||||
|
||||
|
||||
<menuitem name="Настройка" id="separator1" parent="contract.main1"/>
|
||||
<menuitem name="Виды договоров" id="contract_profiles1" parent="separator1"
|
||||
action="contract.contract_profile_action"/>
|
||||
<menuitem name="Включенные договора" id="contract_profile_setting1" parent="separator1"
|
||||
action="contract.contract_allowed_profiles_action"/>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
@ -1,93 +0,0 @@
|
||||
# fehy_base_consent
|
||||
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
|
||||
## Add your files
|
||||
|
||||
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
|
||||
- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://gitlab.inf-centre.ru/mklab-base/l10n-russia/fehy_base_consent.git
|
||||
git branch -M v17-dev
|
||||
git push -uf origin v17-dev
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
|
||||
- [ ] [Set up project integrations](https://gitlab.inf-centre.ru/mklab-base/l10n-russia/fehy_base_consent/-/settings/integrations)
|
||||
|
||||
## Collaborate with your team
|
||||
|
||||
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
|
||||
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
|
||||
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
|
||||
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
|
||||
- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
|
||||
|
||||
## Test and Deploy
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
|
||||
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
|
||||
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
|
||||
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
|
||||
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
|
||||
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
|
||||
|
||||
***
|
||||
|
||||
# Editing this README
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
|
||||
## Suggestions for a good README
|
||||
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
@ -1,3 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': "fehu_base_consent",
|
||||
|
||||
'summary': """
|
||||
Печать доверенности на получение ТМЦ
|
||||
""",
|
||||
|
||||
'description': """
|
||||
Создание списка доверенностей на получение ТМЦ и их печать.
|
||||
|
||||
Создание доверенности:
|
||||
1. Меню Покупки - Доверенности - кнопка "Создать";
|
||||
2. На форме указываем:
|
||||
2.1. Контрагент - поставщик;
|
||||
2.2. Заказ на закупку;
|
||||
2.3. Даты действия доверенности ("дата выдачи" и "действительно по").
|
||||
|
||||
Для печати:
|
||||
1. Меню Настройки - Техническое - Отчеты;
|
||||
2. Находим в списке fehu_base_consent и добавляем в меню "Печать";
|
||||
3. Открываем созданную запись доверенности - Действие - "Доверенность".
|
||||
""",
|
||||
|
||||
'author': "Odoo Community Association (OCA), MK Lab",
|
||||
'website': "https://www.inf-centre.ru/",
|
||||
|
||||
'category': 'Uncategorized',
|
||||
'version': '0.1',
|
||||
|
||||
# any module necessary for this one to work correctly
|
||||
'depends': ['base','account','sale', 'purchase','hr',],
|
||||
|
||||
# always loaded
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/fehy_base_consent_views.xml',
|
||||
'views/hr_employee_views.xml',
|
||||
'views/purchase_order_views.xml',
|
||||
'report/consent_report.xml',
|
||||
],
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import fehu_base_consent
|
||||
from . import hr_employee
|
||||
from . import purchase_order
|
@ -1,46 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
class FehuBaseConsent(models.Model):
|
||||
_name = 'fehu.base.consent'
|
||||
_inherit = ['mail.thread', 'utm.mixin']
|
||||
_description = 'Consent'
|
||||
_order = 'date_from desc'
|
||||
|
||||
name = fields.Char(string=_('Номер'))
|
||||
date_from = fields.Date(string=_('Дата выдачи'), default=lambda self: fields.Datetime.now())
|
||||
date_to = fields.Date(string=_('Действительна по'), default=lambda self: datetime.today() + timedelta(days=180))
|
||||
partner_id = fields.Many2one('res.partner', string=_('Контрагент'), required=1)
|
||||
employee_id = fields.Many2one('hr.employee', string=_('Сотрудник'), required=1)
|
||||
purchaseorder_id = fields.Many2one('purchase.order', _('Заказ на закупку'), domain="[('partner_id','=',partner_id)]",
|
||||
required=1)
|
||||
company_id = fields.Many2one('res.company', string=_('Компания'),
|
||||
default=lambda self: self.env['res.company']._company_default_get('fehu.consent'),
|
||||
required=1)
|
||||
|
||||
@api.model
|
||||
def create(self, val):
|
||||
name = self.env['ir.sequence'].next_by_code('fehu.base.consent')
|
||||
if name:
|
||||
if 'name' in val:
|
||||
if val['name'] == False:
|
||||
val.update({
|
||||
'name': name,
|
||||
})
|
||||
|
||||
result = super(FehuBaseConsent, self).create(val)
|
||||
return result
|
||||
|
||||
@api.onchange('purchaseorder_id')
|
||||
def set_partner(self):
|
||||
if self.purchaseorder_id:
|
||||
self.partner_id = self.purchaseorder_id.partner_id
|
||||
|
||||
@api.constrains('purchaseorder_id')
|
||||
def fill_order(self):
|
||||
p_orders = self.env['purchase.order'].sudo().browse(self.purchaseorder_id.id)
|
||||
for order in p_orders:
|
||||
order.consent_id = self.id
|
@ -1,11 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import fields, models, _
|
||||
|
||||
|
||||
class HrEmployee(models.Model):
|
||||
_inherit = 'hr.employee'
|
||||
|
||||
inn = fields.Char(string=_("ИНН"))
|
||||
pass_kem = fields.Char(string=_("Кем выдан паспорт"))
|
||||
pass_date = fields.Date(string=_('Дата выдачи паспорта'))
|
@ -1,9 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import fields, models, _
|
||||
|
||||
|
||||
class PurchaseOrder(models.Model):
|
||||
_inherit = 'purchase.order'
|
||||
|
||||
consent_id = fields.Many2one('fehu.base.consent', string=_('Доверенность'))
|
@ -1,560 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<report
|
||||
string="Доверенность"
|
||||
id="action_report_consent"
|
||||
model="fehu.base.consent"
|
||||
report_type="qweb-pdf"
|
||||
name="fehu_base_consent.report_consent"
|
||||
file="fehu_base_consent.report_consent"
|
||||
/>
|
||||
|
||||
<record model="ir.actions.report" id="fehu_base_consent.action_report_consent">
|
||||
<field name="name">Доверенность</field>
|
||||
<field name="model">fehu.base.consent</field>
|
||||
<field name="print_report_name">(u'Доверенность - %s.pdf' % (object.name))</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">fehu_base_consent.report_consent</field>
|
||||
</record>
|
||||
|
||||
<record id="paperformat_a4new" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">15</field>
|
||||
<field name="margin_bottom">15</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">10</field>
|
||||
<field name="dpi">90</field>
|
||||
</record>
|
||||
|
||||
<template id="fehu_base_consent.report_consent">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<div class="page">
|
||||
<style type="text/css">
|
||||
/*----------------Invoice classes-------------------*/
|
||||
p {
|
||||
font-size: 13px;
|
||||
}
|
||||
.tb-numbers {
|
||||
width: 600px;
|
||||
}
|
||||
.tb-numbers td {
|
||||
padding: 4px 10px;
|
||||
}
|
||||
.tb-numbers label {
|
||||
display: inline-block;
|
||||
padding: 4px 0px 0px;
|
||||
line-height: 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.tb-numbers input {
|
||||
width: 100px;
|
||||
}
|
||||
.company-info {
|
||||
width: 100%;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.company-info td {
|
||||
padding: 5px 2px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.approver-info {
|
||||
width: 100%;
|
||||
margin: 20px auto;
|
||||
text-align: center
|
||||
}
|
||||
.approver-info .director {
|
||||
font-weight: bold;
|
||||
}
|
||||
.approver-info .title {
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.approver-info .signature {
|
||||
font-size: 11px;
|
||||
padding-top: 40px;
|
||||
}
|
||||
.actDate {
|
||||
float: right
|
||||
}
|
||||
.actDescription {
|
||||
width: 100%;
|
||||
padding-top: 30px
|
||||
}
|
||||
.act-info p {
|
||||
font-weight: bold;
|
||||
}
|
||||
.buyer-box {
|
||||
width: 50%;
|
||||
}
|
||||
.buyer-box table {
|
||||
width: 100%;
|
||||
}
|
||||
.buyer-box .tb-info {
|
||||
width: 310px;
|
||||
}
|
||||
.buyer-box .tb-info td {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
.buyer-box .tb-info td.lbl {
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
width: 40%;
|
||||
}
|
||||
.tb-invoice {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.tb-invoice td {
|
||||
padding: 2px 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 11px;
|
||||
text-align: center;
|
||||
}
|
||||
.tb-invoice td input {
|
||||
border: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
.tb-invoice .head td {
|
||||
background: #f3f3f3;
|
||||
font-weight: bold;
|
||||
}
|
||||
.deleteRow {
|
||||
color: Red;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tb-act {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 15px;
|
||||
clear: both;
|
||||
margin: 20px 0px 10px 0px;
|
||||
}
|
||||
.tb-act td {
|
||||
padding: 2px 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
}
|
||||
.tb-act td input {
|
||||
border: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
.tb-act .head td {
|
||||
background: #f3f3f3;
|
||||
}
|
||||
.tb-act td .deleteActRow {
|
||||
color: Red;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
.description {
|
||||
font-size: 12px;
|
||||
text-align: justify;
|
||||
text-indent: 1.5em;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.tb-total {
|
||||
width: 405px;
|
||||
margin: 30px 0px 20px auto;
|
||||
}
|
||||
.tb-total td {
|
||||
padding: 2px 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.tb-total td.lbl {
|
||||
font-weight: bold;
|
||||
text-align: right;
|
||||
}
|
||||
.tb-total td.val {
|
||||
border: 1px solid #ccc;
|
||||
min-width: 50px;
|
||||
}
|
||||
.tb-total td input {
|
||||
padding: 1px;
|
||||
font-size: 11px;
|
||||
}
|
||||
.act-link-addrow-container {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.link-addrow,
|
||||
.act-link-addrow {
|
||||
text-decoration: none !important;
|
||||
border-bottom: 1px dashed #777;
|
||||
font-size: 13px;
|
||||
}
|
||||
.btn-box {
|
||||
margin: 10px 0px;
|
||||
}
|
||||
.signer-box {
|
||||
width: 400px;
|
||||
}
|
||||
.buyer-box .tb-info {
|
||||
width: 400px;
|
||||
}
|
||||
.btn-box a {
|
||||
font-size: 14px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.podpis-box {
|
||||
clear: both;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
margin: 20px auto 30px;
|
||||
width: 100%;
|
||||
}
|
||||
.tb-podpis {
|
||||
width: 100%;
|
||||
}
|
||||
.podpis-box .box1 {
|
||||
float: left;
|
||||
width: 48%;
|
||||
}
|
||||
/*SIGNATURES PLACE BEGIN*/
|
||||
.signatures-box {
|
||||
clear: both;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
margin: 20px auto 30px;
|
||||
width: 100%;
|
||||
}
|
||||
.signatures-box .box1 {
|
||||
float: left;
|
||||
width: 35%;
|
||||
}
|
||||
.signatures-box .box2 {
|
||||
float: right;
|
||||
width: 35%;
|
||||
}
|
||||
.signatures-box .box1 table,
|
||||
.signatures-box .box2 table {
|
||||
width: 100%;
|
||||
}
|
||||
.signatures-box table td {
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
/*SIGNATURES PLACE END*/
|
||||
.podpis-box .box2 {
|
||||
float: right;
|
||||
width: 48%;
|
||||
}
|
||||
.podpis-box .box1 table,
|
||||
.podpis-box .box2 table {
|
||||
width: 100%;
|
||||
}
|
||||
.podpis-box table td {
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
.special-line {
|
||||
border-bottom: 1px solid #000;
|
||||
display: block;
|
||||
line-height: 22px !important;
|
||||
text-align: center;
|
||||
}
|
||||
.w120 {
|
||||
width: 120px;
|
||||
}
|
||||
.w130 {
|
||||
width: 130px;
|
||||
}
|
||||
.note {
|
||||
font-size: 11px !important;
|
||||
}
|
||||
.l {
|
||||
text-align: left !important;
|
||||
}
|
||||
.r {
|
||||
text-align: right !important;
|
||||
}
|
||||
.c {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div>
|
||||
<h4 style="text-align:center; margin:10px 5px 5px;">
|
||||
|
||||
|
||||
Доверенность №
|
||||
<span t-field="o.name"/>
|
||||
</h4>
|
||||
</div>
|
||||
<table style="width:55%">
|
||||
<tr>
|
||||
<td>Дата выдачи:</td>
|
||||
|
||||
|
||||
<td>
|
||||
<span t-field="o.date_from" t-options="{"widget": "date"}"/>
|
||||
г.
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Доверенность действительна по:</td>
|
||||
<td>
|
||||
<span t-field="o.date_from" t-options="{"widget": "date"}"/>
|
||||
г.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<div class="special-line" style="width:100%;margin-top:15px;text-align:center">
|
||||
<b>
|
||||
<span t-field="o.company_id.name"/>, адрес:<span t-field="o.company_id.street"/>, ИНН
|
||||
<span t-field="o.company_id.vat"/>,
|
||||
|
||||
</b>
|
||||
</div>
|
||||
<div style="margin:0 auto;text-align:center;">наименование предприятия и его адрес</div>
|
||||
<table style="width:100%;margin-top:10px">
|
||||
<tr>
|
||||
<td style="width:30%">
|
||||
|
||||
|
||||
Доверенность выдана
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width:100%;text-align:center;">
|
||||
<span style="border-bottom:1px solid;display:block;clear:both;text-align:center;">
|
||||
<span t-field="o.employee_id"/>,<span t-field="o.employee_id.job_id.name"/>, ИНН
|
||||
<span t-field="o.employee_id.inn"/>
|
||||
|
||||
|
||||
</span>
|
||||
<span style="">
|
||||
|
||||
|
||||
должность и Ф.И.О.
|
||||
|
||||
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<td>Паспорт серия и №
|
||||
|
||||
|
||||
<span style="padding:0 5px 0 5px;margin-left:12px;margin-right:12px;display:inline-table;"
|
||||
class="special-line">
|
||||
|
||||
<span t-field="o.employee_id.passport_id"/>
|
||||
|
||||
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Кем выдан
|
||||
|
||||
|
||||
<span style="padding:0 5px 0 5px;margin-left:12px;margin-right:12px;display:inline-table;"
|
||||
class="special-line">
|
||||
<span t-field="o.employee_id.pass_kem"/>
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Дата выдачи
|
||||
|
||||
|
||||
<span style="padding:0 5px 0 5px;margin-left:12px;margin-right:12px;display:inline-table;"
|
||||
class="special-line">
|
||||
|
||||
<span t-field="o.employee_id.pass_date"/>
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<td style="width:25%">
|
||||
|
||||
|
||||
На получение от
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width:75%;text-align:center;">
|
||||
<span style="border-bottom:1px solid;display:block;clear:both;">
|
||||
|
||||
|
||||
<span t-field="o.partner_id"/>
|
||||
|
||||
|
||||
</span>
|
||||
<span style="">
|
||||
|
||||
|
||||
наименование поставщика
|
||||
|
||||
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width:25%">
|
||||
|
||||
|
||||
Материальных ценностей по
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width:75%;text-align:center;">
|
||||
<span style="border-bottom:1px solid;display:block;clear:both;">
|
||||
|
||||
|
||||
Заказу на закупку №
|
||||
<span t-field="o.purchaseorder_id.name"/>
|
||||
от
|
||||
<span t-field="o.purchaseorder_id.date_order"
|
||||
t-options="{"widget": "date"}"/>
|
||||
г.
|
||||
|
||||
|
||||
</span>
|
||||
<span style="">
|
||||
|
||||
|
||||
наименование, номер и дата документа
|
||||
|
||||
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div>
|
||||
<h4 style="text-align:center; margin:15px 5px 15px;">
|
||||
|
||||
|
||||
Перечень материальных ценностей,
|
||||
|
||||
|
||||
<br/>
|
||||
подлежащих получению
|
||||
|
||||
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<table class="tb-invoice">
|
||||
<tr class="head">
|
||||
<td></td>
|
||||
<td style="min-width:200px;">Наименование товаров (работ, услуг)</td>
|
||||
<td>Ед. изм.</td>
|
||||
<td>Количество</td>
|
||||
</tr>
|
||||
<t t-set="num" t-value="1"/>
|
||||
<t t-foreach="o.purchaseorder_id.order_line" t-as="line">
|
||||
<tr class="data-row">
|
||||
<td>
|
||||
<t t-esc="num"/>
|
||||
</td>
|
||||
<td class="l" style="white-space: pre-wrap;">
|
||||
<span t-field="line.name"/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="line.product_uom"/>
|
||||
</td>
|
||||
<td>
|
||||
<span t-field="line.product_qty"/>
|
||||
</td>
|
||||
</tr>
|
||||
<t t-set="num" t-value="num+1"/>
|
||||
</t>
|
||||
</table>
|
||||
|
||||
<div class="clear h100"></div>
|
||||
<div>
|
||||
<p></p>
|
||||
|
||||
<p>Подпись лица, получившего доверенность ___________________ удостоверяем</p>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="podpis-box">
|
||||
<table style="width:50%;">
|
||||
<tr>
|
||||
<td style="width: 13%;">Руководитель предприятия</td>
|
||||
<td style="width: 19%; vertical-align: bottom;">
|
||||
|
||||
|
||||
<span class="special-line"></span>
|
||||
|
||||
|
||||
<span class="note">(подпись)</span>
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width: 16%; vertical-align: bottom;">
|
||||
|
||||
|
||||
<span class="special-line"></span>
|
||||
|
||||
|
||||
<span class="note">(Ф.И.О)</span>
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width: 16%; vertical-align: bottom;"></td>
|
||||
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 13%;">Гл. бухгалтер:</td>
|
||||
<td style="width: 19%; vertical-align: bottom;">
|
||||
|
||||
|
||||
<span class="special-line"></span>
|
||||
|
||||
|
||||
<span class="note">(подпись)</span>
|
||||
|
||||
|
||||
</td>
|
||||
<td style="width: 16%; vertical-align: bottom;">
|
||||
|
||||
|
||||
<span class="special-line"></span>
|
||||
|
||||
|
||||
<span class="note">(Ф.И.О)</span>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</data>
|
||||
</odoo>
|
@ -1,2 +0,0 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_fehu_base_consent,fehu.base.consent,model_fehu_base_consent,base.group_user,1,1,1,1
|
|
@ -1,65 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="fehu.base.consent.tree" model="ir.ui.view">
|
||||
<field name="name">Consents</field>
|
||||
<field name="model">fehu_base_consent</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="fehu.base.consent.form" model="ir.ui.view">
|
||||
<field name="name">consent.form</field>
|
||||
<field name="model">fehu.base.consent</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header></header>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name" placeholder="Для автонумерации оставьте пустым"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="employee_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
<field name="purchaseorder_id"/>
|
||||
<field name="company_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</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="fehu_base_consent.action_consent" model="ir.actions.act_window">
|
||||
<field name="name">Доверенности</field>
|
||||
<field name="res_model">fehu.base.consent</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="fehu_base_consent.menu_1" name="Consents" parent="purchase.menu_purchase_root"
|
||||
action="fehu_base_consent.action_consent"/>
|
||||
|
||||
<record id="seq_consent" model="ir.sequence">
|
||||
<field name="name">Consents</field>
|
||||
<field name="code">fehu.consent</field>
|
||||
<field name="prefix">CON</field>
|
||||
<field name="padding">5</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_employee_form" model="ir.ui.view">
|
||||
<field name="name">view_employee_form.inherit</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="inherit_id" ref="hr.view_employee_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='bank_account_id']" position="after">
|
||||
<field name="inn"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='passport_id']" position="after">
|
||||
<field name="pass_kem"/>
|
||||
<field name="pass_date"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="purchase_order_form" model="ir.ui.view">
|
||||
<field name="name">purchase.order.form.inherit</field>
|
||||
<field name="model">purchase.order</field>
|
||||
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='incoterm_id']" position="after">
|
||||
<field name="consent_id" context="{'default_partner_id':partner_id,'default_purchaseorder_id':id}"
|
||||
domain="[('purchaseorder_id','=',id)]"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
@ -1,5 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
from . import report_helper
|
||||
from . import report
|
@ -1,51 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': "Russia - Documents",
|
||||
|
||||
'summary': "Первичные документы",
|
||||
|
||||
'description': """
|
||||
The module for print documents in accordance laws of Russia.
|
||||
============================================================
|
||||
Возможности:
|
||||
* Товарная накладная (ТОРГ-12)
|
||||
* Счет на оплату
|
||||
* Счет-фактура
|
||||
* Акт выполненных работ
|
||||
* Вывод подписей и печати
|
||||
""",
|
||||
|
||||
'author': "CodUP and MKLab",
|
||||
'website': "https://inf-centre.ru",
|
||||
|
||||
'license': 'AGPL-3',
|
||||
'category': 'Localization',
|
||||
'version': '17.0.2024.06.28',
|
||||
|
||||
'depends': ['base','sale','account','sale_stock','uom'],
|
||||
|
||||
'external_dependencies': {'python' : ['pytils']},
|
||||
|
||||
'data': [
|
||||
'views/account_invoice_view.xml',
|
||||
'views/res_partner_view.xml',
|
||||
'views/res_company_view.xml',
|
||||
'views/res_users_view.xml',
|
||||
'views/res_bank_view.xml',
|
||||
'views/uom.xml',
|
||||
'views/tax.xml',
|
||||
'views/product.xml',
|
||||
'views/l10n_ru_doc_data.xml',
|
||||
'report/l10n_ru_doc_report.xml',
|
||||
'report/report_order.xml',
|
||||
'report/report_invoice.xml',
|
||||
'report/report_bill.xml',
|
||||
'report/report_act.xml',
|
||||
'report/report_upd.xml',
|
||||
'report/report_updn.xml',
|
||||
],
|
||||
|
||||
'demo': [
|
||||
'demo/l10n_ru_doc_demo.xml',
|
||||
],
|
||||
}
|
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -1,116 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * l10n_ru_doc
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-19 09:27+0000\n"
|
||||
"PO-Revision-Date: 2020-08-19 09:27+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_act
|
||||
msgid "Act"
|
||||
msgstr "Акт об оказании услуг"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_bill
|
||||
msgid "Bill"
|
||||
msgstr "Товарная накладная (ТОРГ-12)"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_facsimile
|
||||
#: model:ir.model.fields,help:l10n_ru_doc.field_res_users__print_facsimile
|
||||
msgid "Check this for adding Facsimiles of responsible persons to documents."
|
||||
msgstr "Отметьте, для вставки подписей ответственных лиц в документы."
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_stamp
|
||||
msgid "Check this for adding Stamp of company to documents."
|
||||
msgstr "Отметьте, для вставки печати организации в документы."
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__chief_id
|
||||
msgid "Chief"
|
||||
msgstr "Руководитель организации"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_account_setup_bank_manual_config__bank_corr_acc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_bank__corr_acc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner_bank__bank_corr_acc
|
||||
msgid "Corresponding account"
|
||||
msgstr "Корр. счет"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_ru_doc.view_company_ru_form
|
||||
msgid "Documents"
|
||||
msgstr "Документы"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__facsimile
|
||||
msgid "Facsimile"
|
||||
msgstr "Подпись"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__inn
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__inn
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__inn
|
||||
msgid "INN"
|
||||
msgstr "ИНН"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__kpp
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__kpp
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__kpp
|
||||
msgid "KPP"
|
||||
msgstr "КПП"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__okpo
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_partner__okpo
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__okpo
|
||||
msgid "OKPO"
|
||||
msgstr "ОКПО"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_anywhere
|
||||
msgid "Print Anywhere"
|
||||
msgstr "Документы"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_facsimile
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_users__print_facsimile
|
||||
msgid "Print Facsimile"
|
||||
msgstr "Выводить подписи"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__print_stamp
|
||||
msgid "Print Stamp"
|
||||
msgstr "Выводить печать"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model_terms:ir.ui.view,arch_db:l10n_ru_doc.view_company_ru_form
|
||||
msgid "Responsible Persons"
|
||||
msgstr "Ответственные лица"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,field_description:l10n_ru_doc.field_res_company__stamp
|
||||
msgid "Stamp"
|
||||
msgstr "Печать"
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.model.fields,help:l10n_ru_doc.field_res_company__print_anywhere
|
||||
msgid "Uncheck this, if you want add Facsimile and Stamp only in email."
|
||||
msgstr "Снимите отметку, если хотите добавлять подписи и печать только в email."
|
||||
|
||||
#. module: l10n_ru_doc
|
||||
#: model:ir.actions.report,name:l10n_ru_doc.report_account_invoice_upd
|
||||
msgid "Upd"
|
||||
msgstr "Универсальный платежный документ (УПД)"
|
@ -1,12 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import res_partner
|
||||
from . import res_company
|
||||
from . import res_users
|
||||
from . import res_bank
|
||||
from . import account_invoice
|
||||
from . import account_move_line
|
||||
from . import sale
|
||||
from . import uom
|
||||
from . import tax
|
||||
from . import product
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,144 +0,0 @@
|
||||
from datetime import datetime
|
||||
from odoo import api, fields, models
|
||||
|
||||
class AccountInvoice(models.Model):
|
||||
_inherit = 'account.move'
|
||||
kladov=fields.Many2one('res.users', string='Ответственный за передачу товаров/услуг')
|
||||
gruzopol=fields.Many2one('res.partner', string='Грузополучатель')
|
||||
gruzootpr=fields.Many2one('res.partner', string='Грузоотправитель')
|
||||
transport=fields.Char('Данные о транспортировке и грузе')
|
||||
osnovanie=fields.Char('Основание')
|
||||
payment_text=fields.Char('Текст для платежек в УПД', compute='_compute_get_txtpayment')
|
||||
payment_num=fields.Char('Номер платежки в УПД', compute='_compute_get_txtpayment')
|
||||
payment_date = fields.Char('Дата платежки в УПД', compute='_compute_get_txtpayment')
|
||||
only_service = fields.Boolean('Только услуги', compute='_compute_get_check_service')
|
||||
|
||||
@api.depends('invoice_line_ids')
|
||||
def _compute_get_check_service(self):
|
||||
for s in self:
|
||||
s.only_service = all((line.product_id.type=='service') for line in s.invoice_line_ids)
|
||||
|
||||
def _compute_get_txtpayment(self):
|
||||
for s in self:
|
||||
payments = s._get_reconciled_payments()
|
||||
payment_text = ''
|
||||
|
||||
for payment in payments:
|
||||
if payment.date:
|
||||
payment_text += payment.name + ' от ' + \
|
||||
fields.Datetime.from_string(payment.date).strftime("%d.%m.%Y")
|
||||
if payments[-1]!=payment:
|
||||
payment_text += ', '
|
||||
if payments:
|
||||
s.payment_num = payments[0].name
|
||||
s.payment_date = fields.Datetime.from_string(payments[0].date).strftime("%d.%m.%Y")
|
||||
else:
|
||||
s.payment_num = ''
|
||||
s.payment_text = ''
|
||||
s.payment_date = ''
|
||||
|
||||
s.payment_text = payment_text
|
||||
|
||||
def action_bill_sent(self):
|
||||
assert len(self) == 1, 'This option should only be used for a single id at a time.'
|
||||
template = self.env.ref('account.email_template_edi_invoice', False)
|
||||
compose_form = self.env.ref('mail.email_compose_message_wizard_form', False)
|
||||
ctx = {
|
||||
'default_model': 'account.move',
|
||||
'default_res_id': self.id,
|
||||
'default_use_template': bool(template),
|
||||
'default_template_id': template.id,
|
||||
'default_composition_mode': 'comment',
|
||||
'mark_invoice_as_sent': True,
|
||||
}
|
||||
return {
|
||||
'name': 'Compose Email',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'mail.compose.message',
|
||||
'views': [(compose_form.id, 'form')],
|
||||
'view_id': compose_form.id,
|
||||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
def bill_print(self):
|
||||
assert len(self) == 1, 'This option should only be used for a single id at a time.'
|
||||
return self.env['report'].get_action(self, 'l10n_ru_doc.report_upd')
|
||||
|
||||
def get_delivery_doc_name(self):
|
||||
for s in self:
|
||||
pickings = []
|
||||
pickings_list = '0'
|
||||
orders = self.env['sale.order'].sudo().search([('name','=',s.invoice_origin)])
|
||||
for o in orders:
|
||||
if o.picking_ids:
|
||||
for p in o.picking_ids:
|
||||
pickings.append(p.name)
|
||||
if len(pickings)>0:
|
||||
pickings_list = ';'.join(pickings)
|
||||
if pickings_list != '0':
|
||||
return pickings_list
|
||||
if s.name.find('/') > -1:
|
||||
return 'УПД № ' + s.name[len(s.name) - 4:]
|
||||
return 'УПД № ' + s.name
|
||||
|
||||
def get_delivery_doc_date(self):
|
||||
for s in self:
|
||||
pickings = []
|
||||
pickings_list = '0'
|
||||
orders = self.env['sale.order'].sudo().search([('name','=',s.invoice_origin)])
|
||||
for o in orders:
|
||||
if o.picking_ids:
|
||||
for p in o.picking_ids:
|
||||
pickings.append(datetime.strftime(p.date, '%d.%m.%Y'))
|
||||
if len(pickings)>0:
|
||||
pickings_list = ';'.join(pickings)
|
||||
if pickings_list != '0':
|
||||
return pickings_list
|
||||
return datetime.strftime(s.date, '%d.%m.%Y')
|
||||
|
||||
def get_function_partner(self, partner=False, type='director'):
|
||||
if partner:
|
||||
if partner.parent_id:
|
||||
partner = partner.parent_id
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner.id),
|
||||
('type', '=', type)], limit=1)
|
||||
if director:
|
||||
if director.function:
|
||||
return director.function
|
||||
return ''
|
||||
|
||||
def get_name_partner(self, partner=False, type='director'):
|
||||
if partner:
|
||||
if partner.parent_id:
|
||||
partner = partner.parent_id
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner.id),
|
||||
('type', '=', type)], limit=1)
|
||||
if director:
|
||||
if director.name:
|
||||
return director.name
|
||||
return ''
|
||||
|
||||
def get_facsimile_partner(self, partner=False, type='director'):
|
||||
if partner:
|
||||
if partner.parent_id:
|
||||
partner = partner.parent_id
|
||||
director = self.env['res.partner'].search([('parent_id', '=', partner.id),
|
||||
('type', '=', type)],
|
||||
limit=1)
|
||||
if director:
|
||||
if director.facsimile:
|
||||
return director.facsimile
|
||||
return ''
|
||||
|
||||
def get_stamp_partner(self, partner=False):
|
||||
if partner:
|
||||
if partner.parent_id:
|
||||
partner = partner.parent_id
|
||||
if partner.stamp:
|
||||
return partner.stamp
|
||||
return False
|
||||
|
||||
|
@ -1,29 +0,0 @@
|
||||
from datetime import datetime
|
||||
from odoo import api, fields, models
|
||||
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = 'account.move.line'
|
||||
|
||||
price_total_pf = fields.Monetary(
|
||||
string='TotalPF',
|
||||
compute='_compute_totals',
|
||||
currency_field='currency_id',
|
||||
)
|
||||
|
||||
@api.depends('quantity', 'discount', 'price_unit', 'tax_ids', 'currency_id')
|
||||
def _compute_totals(self):
|
||||
super(AccountMoveLine,self)._compute_totals()
|
||||
for line in self:
|
||||
line_discount_price_unit = line.price_unit * (1 - (line.discount / 100.0))
|
||||
if line.tax_ids.filtered(lambda tax: tax.invisiblePF == False):
|
||||
taxes_res = line.tax_ids.filtered(lambda tax: tax.invisiblePF == False).compute_all(
|
||||
line_discount_price_unit,
|
||||
quantity=line.quantity,
|
||||
currency=line.currency_id,
|
||||
product=line.product_id,
|
||||
partner=line.partner_id,
|
||||
is_refund=line.is_refund,
|
||||
)
|
||||
line.price_total_pf = taxes_res['total_included']
|
||||
else:
|
||||
line.price_total_pf = line.price_total
|
@ -1,5 +0,0 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class ProductTnved(models.Model):
|
||||
_inherit = 'product.product'
|
||||
kod_tnved = fields.Char('Код ТНВЭД')
|
@ -1,19 +0,0 @@
|
||||
from odoo import api, fields, models
|
||||
|
||||
class Bank(models.Model):
|
||||
_inherit = 'res.bank'
|
||||
|
||||
corr_acc = fields.Char('Corresponding account', size=64)
|
||||
|
||||
|
||||
class ResPartnerBank(models.Model):
|
||||
_inherit = 'res.partner.bank'
|
||||
|
||||
bank_corr_acc = fields.Char('Corresponding account', size=64)
|
||||
|
||||
@api.onchange('bank_id')
|
||||
def onchange_bank_id(self):
|
||||
for s in self:
|
||||
s.bank_name = s.bank_id.name
|
||||
s.bank_bic = s.bank_id.bic
|
||||
s.bank_corr_acc = s.bank_id.corr_acc
|
@ -1,18 +0,0 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class Company(models.Model):
|
||||
_inherit = 'res.company'
|
||||
|
||||
inn = fields.Char(related='partner_id.inn', readonly=False)
|
||||
kpp = fields.Char(related='partner_id.kpp', readonly=False)
|
||||
okpo = fields.Char(related='partner_id.okpo', readonly=False)
|
||||
chief_id = fields.Many2one('res.users', 'Chief')
|
||||
accountant_id = fields.Many2one('res.users', 'General Accountant')
|
||||
print_facsimile = fields.Boolean(string='Print Facsimile',
|
||||
help="Check this for adding Facsimiles of responsible persons to documents.")
|
||||
print_stamp = fields.Boolean(string='Print Stamp',
|
||||
help="Check this for adding Stamp of company to documents.")
|
||||
stamp = fields.Binary("Stamp")
|
||||
print_anywhere = fields.Boolean(string='Print Anywhere',
|
||||
help="Uncheck this, if you want add Facsimile and Stamp only in email.",
|
||||
default=True)
|
@ -1,11 +0,0 @@
|
||||
from odoo import fields, models
|
||||
class ResPartner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
|
||||
inn = fields.Char('INN', related='vat')
|
||||
kpp = fields.Char('KPP', size=9)
|
||||
okpo = fields.Char('OKPO', size=14)
|
||||
ogrn = fields.Char('ОГРН')
|
||||
type = fields.Selection(selection_add=[('director', 'Директор'), ('accountant', 'Бухгалтер')])
|
||||
facsimile = fields.Binary("Подпись")
|
||||
stamp = fields.Binary("Печать")
|
@ -1,7 +0,0 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class Users(models.Model):
|
||||
_inherit = 'res.users'
|
||||
|
||||
print_facsimile = fields.Boolean(related='company_id.print_facsimile')
|
||||
facsimile = fields.Binary()
|
@ -1,8 +0,0 @@
|
||||
from odoo import models
|
||||
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = 'sale.order'
|
||||
def print_quotation(self):
|
||||
self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'})
|
||||
return self.env['report'].get_action(self, 'l10n_ru_doc.report_order')
|
||||
|
@ -1,6 +0,0 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class TaxInherit(models.Model):
|
||||
_inherit = 'account.tax'
|
||||
|
||||
invisiblePF = fields.Boolean('Не видно в ПФ')
|
@ -1,4 +0,0 @@
|
||||
from odoo import fields, models
|
||||
class UomInherit(models.Model):
|
||||
_inherit = 'uom.uom'
|
||||
kod = fields.Char('Код единицы измерения')
|
@ -1,5 +0,0 @@
|
||||
from . import report_order
|
||||
from . import report_invoice
|
||||
from . import report_bill
|
||||
from . import report_act
|
||||
from . import report_upd
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,107 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="paperformat_a4" model="report.paperformat">
|
||||
<field name="name">A4</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">7</field>
|
||||
<field name="margin_bottom">7</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">35</field>
|
||||
<field name="dpi">75</field>
|
||||
</record>
|
||||
<record id="paperformat_a4l" model="report.paperformat">
|
||||
<field name="name">A4 Landscape</field>
|
||||
<field name="default" eval="True"/>
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Landscape</field>
|
||||
<field name="margin_top">7</field>
|
||||
<field name="margin_bottom">7</field>
|
||||
<field name="margin_left">7</field>
|
||||
<field name="margin_right">7</field>
|
||||
<field name="header_line" eval="False"/>
|
||||
<field name="header_spacing">75</field>
|
||||
<field name="dpi">60</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_ru_doc.action_report_saleorder_new" model="ir.actions.report">
|
||||
<field name="name">Счет по форме 1С</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_order</field>
|
||||
<field name="report_file">l10n_ru_doc.report_order</field>
|
||||
<field name="print_report_name">'Счет - %s ' % (object.name+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name))</field>
|
||||
<field name="binding_model_id" ref="sale.model_sale_order" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_ru_doc.account_invoices_new" model="ir.actions.report">
|
||||
<field name="name">Счет-фактура</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_invoice</field>
|
||||
<field name="report_file">l10n_ru_doc.report_invoice</field>
|
||||
<field name="print_report_name">'Счет-фактура - %s ' % (object.name+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name))</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4l" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_ru_doc.report_account_invoice_bill_new" model="ir.actions.report">
|
||||
<field name="name">Товарная накладная (ТОРГ-12)</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_bill</field>
|
||||
<field name="report_file">l10n_ru_doc.report_bill</field>
|
||||
<field name="print_report_name">'Товарная накладная - %s ' % (object.name+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name))</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4l" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="l10n_ru_doc.report_account_invoice_act_new" model="ir.actions.report">
|
||||
<field name="name">Акт выполненных работ</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_act</field>
|
||||
<field name="report_file">l10n_ru_doc.report_act</field>
|
||||
<field name="print_report_name">'Акт - %s ' % (object.name+' '+(object.partner_id.parent_id.name if object.partner_id.parent_id else object.partner_id.name))</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="report_account_invoice_upd_new" model="ir.actions.report">
|
||||
<field name="name">Универсальный передаточный документ(УПД)</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_upd</field>
|
||||
<field name="report_file">l10n_ru_doc.report_upd</field>
|
||||
<field name="print_report_name">'УПД'</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4l" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<record id="report_account_invoice_updn" model="ir.actions.report">
|
||||
<field name="name">УПД без печатей</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_ru_doc.report_updn</field>
|
||||
<field name="report_file">l10n_ru_doc.report_updn</field>
|
||||
<field name="print_report_name">'УПД без печатей'</field>
|
||||
<field name="binding_model_id" ref="account.model_account_move" />
|
||||
<field name="paperformat_id" ref="l10n_ru_doc.paperformat_a4l" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
@ -1,16 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import models
|
||||
from odoo.addons.l10n_ru_doc.report_helper import QWebHelper
|
||||
|
||||
class RuActReport(models.AbstractModel):
|
||||
_name = 'report.l10n_ru_doc.report_act'
|
||||
|
||||
def _get_report_values(self, docids, data=None):
|
||||
docs = self.env['account.move'].browse(docids)
|
||||
return {
|
||||
'helper': QWebHelper(),
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'account.move',
|
||||
'docs': docs
|
||||
}
|
@ -1,203 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<template id="report_act">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<!-- Multicompany -->
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"></t>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"></t>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"></t>
|
||||
|
||||
<div class="page">
|
||||
|
||||
<STYLE TYPE="text/css">
|
||||
body { background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
tr.R0{ height: 15px; }
|
||||
tr.R0 td.R11C1{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: medium; border-left: #000000 2px solid; border-top: #000000 2px solid; }
|
||||
tr.R0 td.R11C29{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R0 td.R11C3{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 2px solid; }
|
||||
tr.R0 td.R14C1{ text-align: center; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; }
|
||||
tr.R0 td.R14C20{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; }
|
||||
tr.R0 td.R14C23{ vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; }
|
||||
tr.R0 td.R14C29{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
tr.R0 td.R14C3{ vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; }
|
||||
tr.R0 td.R31C1{ font-family: Arial; font-size: 9pt; font-style: normal; }
|
||||
tr.R17{ height: 20px; }
|
||||
tr.R2{ height: 1px; }
|
||||
tr.R3{ height: 28px; }
|
||||
tr.R3 td.R3C1{ font-family: Arial; font-size: 14pt; font-style: normal; font-weight: bold; vertical-align: medium; border-bottom: #000000 2px solid; }
|
||||
tr.R32{ height: 19px; }
|
||||
tr.R37{ height: 25px; }
|
||||
tr.R37 td.R37C1{ border-bottom: #000000 1px solid; }
|
||||
tr.R37 td.R37C17{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; }
|
||||
tr.R37 td.R37C4{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: right; border-bottom: #000000 1px solid; }
|
||||
tr.R37 td.R37C5, tr.R37 td.R37C5I, tr.R37 td.R37C5S{ font-family: Arial; font-size: 7pt; font-style: normal; text-align: right; border-bottom: #000000 1px solid; }
|
||||
tr.R37 td.R37C5I,tr.R37 td.R37C5S { overflow: visible; }
|
||||
tr.R37 td.R37C5I span,tr.R37 td.R37C5S span { position: relative; }
|
||||
tr.R37 td.R37C5I span img { position: absolute; width: 100px; top: -30px; left: -120px;}
|
||||
tr.R37 td.R37C5S span img { position: absolute; width: 140px; top: -60px; left: -60px; }
|
||||
tr.R5{ height: 17px; }
|
||||
tr.R5 td.R22C28{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: right; vertical-align: top; }
|
||||
tr.R5 td.R35C1{ font-family: Arial; font-size: 10pt; font-style: normal; font-weight: bold; }
|
||||
tr.R5 td.R35C17{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; }
|
||||
tr.R5 td.R35C20{ font-family: Arial; font-size: 10pt; font-style: normal; font-weight: bold; border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R36C1{ }
|
||||
tr.R5 td.R36C20{ border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R38C1{ text-align: center; border-top: #000000 1px solid;}
|
||||
tr.R5 td.R5C1{ font-family: Arial; font-size: 9pt; font-style: normal; vertical-align: medium; }
|
||||
tr.R5 td.R5C5{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; vertical-align: top; }
|
||||
tr.R6{ height: 9px; }
|
||||
tr.R6 td.R21C1{ border-top: #000000 2px solid; }
|
||||
tr.R6 td.R33C1{ border-bottom: #000000 2px solid; }
|
||||
table {table-layout: fixed; padding: 0px; padding-left: 2px; vertical-align:bottom; border-collapse:collapse;width: 100%; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
td { padding: 0px; padding-left: 2px; overflow:hidden; }
|
||||
.cu_wspace { white-space:nowrap; }
|
||||
.cu_space1 { width:100%;height:1px;overflow:hidden; }
|
||||
.cu_space28 { width:100%;height:28px;overflow:hidden; }
|
||||
.cu_space9 { width:100%;height:9px;overflow:hidden; }
|
||||
.cu_space29 { width:100%;height:29px;overflow:hidden; }
|
||||
.cu_space34 { width:100%;height:34px;overflow:hidden; }
|
||||
.cu_space20 { width:100%;height:20px;overflow:hidden; }
|
||||
.cu_space19 { width:100%;height:19px;overflow:hidden; }
|
||||
.cu_space33 { width:100%;height:33px;overflow:hidden; }
|
||||
.cu_space25 { width:100%;height:25px;overflow:hidden; }
|
||||
tbody, table, tr, td, th{border: none;}
|
||||
</STYLE>
|
||||
|
||||
<!-- start header -->
|
||||
<TABLE CELLSPACING="0">
|
||||
<COL WIDTH="10%"/>
|
||||
<COL WIDTH="10%"/>
|
||||
<COL WIDTH="40%"/>
|
||||
<COL WIDTH="10%"/>
|
||||
<COL WIDTH="10%"/>
|
||||
<COL WIDTH="10%"/>
|
||||
<COL WIDTH="10%"/>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R3C1" COLSPAN="7"><DIV class="cu_space28"><SPAN class="cu_wspace">Акт № <t t-esc="helper.numer(o.name)"/> от <span t-field="o.invoice_date"/></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R5C1" COLSPAN="2"><SPAN class="cu_wspace">Исполнитель:</SPAN></TD>
|
||||
<TD CLASS="R5C5" COLSPAN="5"><t t-esc="helper.full_representation(company.partner_id)"/></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R5C1" COLSPAN="2"><SPAN class="cu_wspace">Заказчик:</SPAN></TD>
|
||||
<TD CLASS="R5C5" COLSPAN="5"><t t-esc="helper.full_representation(o.partner_id.parent_id or o.partner_id)"/></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R11C1"><DIV class="cu_space29"><SPAN class="cu_wspace">№</SPAN></DIV></TD>
|
||||
<TD CLASS="R11C3" COLSPAN="2"><DIV class="cu_space29"><SPAN class="cu_wspace">Наименование<![CDATA[ ]]>работ,<![CDATA[ ]]>услуг</SPAN></DIV></TD>
|
||||
<TD CLASS="R11C3"><DIV class="cu_space29"><SPAN class="cu_wspace">Кол-во</SPAN></DIV></TD>
|
||||
<TD CLASS="R11C3"><DIV class="cu_space29"><SPAN class="cu_wspace">Ед.</SPAN></DIV></TD>
|
||||
<TD CLASS="R11C3"><DIV class="cu_space29"><SPAN class="cu_wspace">Цена</SPAN></DIV></TD>
|
||||
<TD CLASS="R11C29"><DIV class="cu_space29"><SPAN class="cu_wspace">Сумма</SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0" t-foreach="o.invoice_line_ids" t-as="line">
|
||||
<TD CLASS="R14C1"><SPAN class="cu_wspace"><t t-esc="line_index+1"/></SPAN></TD>
|
||||
<TD CLASS="R14C3" COLSPAN="2"><t t-esc="line.product_id.name or ''"/></TD>
|
||||
<TD CLASS="R14C20"><SPAN class="cu_wspace"><t t-esc="line.quantity or ''"/></SPAN></TD>
|
||||
<TD CLASS="R14C23"><SPAN class="cu_wspace"><t t-esc="line.product_uom_id.name or ''"/></SPAN></TD>
|
||||
<TD CLASS="R14C20"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(line.price_subtotal/line.quantity)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R14C29"><SPAN class="cu_wspace"><t t-esc="line.price_subtotal or ''"/></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R6">
|
||||
<TD COLSPAN="7" CLASS="R21C1"><DIV class="cu_space9"><![CDATA[ ]]></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R22C28" COLSPAN="6"><SPAN class="cu_wspace">Итого:</SPAN></TD>
|
||||
<TD CLASS="R22C28"><SPAN class="cu_wspace"><t t-esc="o.amount_untaxed or '0,00'"/></SPAN></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><DIV class="cu_space9"><![CDATA[ ]]></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R22C28" COLSPAN="6"><SPAN class="cu_wspace">Сумма НДС: <!-- TO DO: [НДС]: --></SPAN></TD>
|
||||
<TD CLASS="R22C28"><SPAN class="cu_wspace"><t t-esc="o.amount_tax or '0,00'"/></SPAN></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD COLSPAN="7"><SPAN class="cu_wspace">Всего оказано услуг <t t-esc="o.invoice_line_ids and len(o.invoice_line_ids) or 0"/>, на сумму <t t-esc="o.amount_total or '0,00'"/> руб.</SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R5C5" COLSPAN="7"><t t-esc="helper.rubles(o.amount_total).capitalize()"/></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<!-- end total -->
|
||||
<!-- start footer -->
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R31C1" COLSPAN="7"><DIV class="cu_space33">Вышеперечисленные услуги выполнены полностью и в срок. Заказчик претензий по объему, качеству и срокам оказания услуг не имеет.</DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R32">
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R6">
|
||||
<TD CLASS="R33C1" COLSPAN="7"><DIV class="cu_space9"><![CDATA[ ]]></DIV></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R35C1" COLSPAN="2"><SPAN class="cu_wspace">ИСПОЛНИТЕЛЬ</SPAN></TD>
|
||||
<TD CLASS="R35C17"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R35C20" COLSPAN="4"><SPAN class="cu_wspace">ЗАКАЗЧИК</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R36C1" COLSPAN="3">Директор <t t-esc="company.name or ''"/><!-- TO DO: ДолжностьИНазваниеОрганизации --></TD>
|
||||
<TD CLASS="R35C17" COLSPAN="3"><SPAN></SPAN></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="7"><![CDATA[ ]]></TD>
|
||||
</TR>
|
||||
<TR CLASS="R37">
|
||||
<TD CLASS="R37C5S"><SPAN><t t-raw="company.print_stamp and (company.print_anywhere or context.get('mark_invoice_as_sent', False)) and helper.img(company.stamp) or ''"/></SPAN></TD>
|
||||
<TD CLASS="R37C5I"><SPAN><t t-raw="company.print_facsimile and (company.print_anywhere or context.get('mark_invoice_as_sent', False)) and helper.img(company.chief_id.facsimile) or ''"/></SPAN></TD>
|
||||
<TD><DIV class="cu_space25" COLSPAN="5"><SPAN></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R38C1" COLSPAN="2"><t t-esc="helper.initials(company.chief_id.name)"/></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R38C1" COLSPAN="2"><SPAN></SPAN></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</data>
|
||||
</openerp>
|
@ -1,14 +0,0 @@
|
||||
from odoo import models
|
||||
from odoo.addons.l10n_ru_doc.report_helper import QWebHelper
|
||||
|
||||
class RuBillReport(models.AbstractModel):
|
||||
_name = 'report.l10n_ru_doc.report_bill'
|
||||
|
||||
def _get_report_values(self, docids, data=None):
|
||||
docs = self.env['account.move'].browse(docids)
|
||||
return {
|
||||
'helper': QWebHelper(),
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'account.move',
|
||||
'docs': docs
|
||||
}
|
@ -1,758 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<template id="report_bill">
|
||||
<t t-call="web.basic_layout">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<!-- Multicompany -->
|
||||
<t t-if="o and 'company_id' in o">
|
||||
<t t-set="company" t-value="o.company_id"></t>
|
||||
</t>
|
||||
<t t-if="not o or not 'company_id' in o">
|
||||
<t t-set="company" t-value="res_company"></t>
|
||||
</t>
|
||||
<t t-set="context" t-value="o._context"></t>
|
||||
|
||||
<div class="page">
|
||||
|
||||
<STYLE TYPE="text/css">
|
||||
body { background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
tr.R0{ height: 17px; }
|
||||
tr.R0 td.R0C0{ color: #413003; }
|
||||
tr.R0 td.R0C5{ font-family: Arial; font-size: 6pt; font-style: normal; vertical-align: top; }
|
||||
tr.R0 td.R0C8{ font-family: Arial; font-size: 7pt; font-style: normal; text-align: right; }
|
||||
tr.R0 td.R19C15{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: right; vertical-align: medium; }
|
||||
tr.R0 td.R20C0{ vertical-align: top; }
|
||||
tr.R0 td.R20C15{ font-family: Arial; font-size: 8pt; font-style: italic; text-align: right; vertical-align: top; }
|
||||
tr.R0 td.R20C3{ text-align: center; vertical-align: top; }
|
||||
tr.R0 td.R20C7{ text-align: right; vertical-align: top; }
|
||||
tr.R0 td.R21C0{ vertical-align: top; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R0 td.R21C1{ text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R21C2{ text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R23C0{ vertical-align: medium; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R0 td.R23C1{ font-family: Arial; font-size: 7pt; font-style: normal; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R23C3{ font-family: Arial; font-size: 7pt; font-style: normal; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 2px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R25C1{ vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R25C10{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R25C12{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R25C13{ text-align: center; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R25C14{ text-align: right; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R25C15{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
tr.R0 td.R25C2{ vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R25C3{ text-align: left; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R25C4{ text-align: center; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R25C5{ text-align: center; vertical-align: top; border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R25C6{ text-align: center; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R25C7{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R25C8{ vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R27C0{ border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R0 td.R27C1{ border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R0 td.R27C11{ text-align: center; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R27C12{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 1px solid; border-right: #ffffff 1px none; }
|
||||
tr.R0 td.R27C13{ text-align: center; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R27C14{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R27C15{ text-align: right; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R27C2{ border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R0 td.R27C3{ border-top: #000000 2px solid; }
|
||||
tr.R0 td.R27C7{ text-align: right; border-top: #000000 2px solid; }
|
||||
tr.R0 td.R27C8{ text-align: right; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R29C11{ text-align: center; vertical-align: top; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R29C7, tr.R0 td.R29C7S{ text-align: right; }
|
||||
tr.R0 td.R29C8{ text-align: right; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R32C3{ border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R32C4{ border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R32C7{ border-top: #000000 1px solid; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R32C8, tr.R0 td.R32C8I{ border-bottom: #000000 1px solid; }
|
||||
|
||||
tr.R0 td.R32C8I,tr.R0 td.R29C7S { overflow: visible; }
|
||||
tr.R0 td.R32C8I span,tr.R0 td.R29C7S span { position: relative; }
|
||||
tr.R0 td.R32C8I span img { position: absolute; width: 100px; top: -30px; }
|
||||
tr.R0 td.R29C7S span img { position: absolute; width: 140px; top: -110px; left: 50px; }
|
||||
|
||||
tr.R0 td.R34C8{ border-left: #ffffff 0px none; border-top: #ffffff 0px none; border-bottom: #000000 1px solid; border-right: #ffffff 0px none; }
|
||||
tr.R0 td.R36C16{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; }
|
||||
tr.R0 td.R36C9{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R42C0{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; vertical-align: bottom; }
|
||||
tr.R0 td.R42C1{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; vertical-align: bottom; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R42C2{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; vertical-align: top; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R42C7{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; vertical-align: top; border-right: #000000 1px solid; }
|
||||
tr.R0 td.R44C2{ border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R44C3{ border-bottom: #ffffff 1px none; }
|
||||
tr.R0 td.R44C6{ border-bottom: #000000 1px solid;}
|
||||
tr.R0 td.R44C6_1{border-right: #000000 1px solid; }
|
||||
tr.R0 td.R46C0{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; }
|
||||
tr.R0 td.R47C17{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; overflow: hidden;border-top: #ffffff 1px none; }
|
||||
tr.R0 td.R47C2{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: left; vertical-align: bottom; border-top: #ffffff 1px none; }
|
||||
tr.R0 td.R47C6{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none;}
|
||||
tr.R0 td.R47C6_1{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top;border-right: #000000 1px solid; }
|
||||
tr.R0 td.R48C2{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: left; vertical-align: bottom; border-bottom: #000000 1px solid; }
|
||||
tr.R0 td.R48C3{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: left; vertical-align: bottom; border-bottom: #ffffff 1px none; }
|
||||
tr.R0 td.R51C10{ text-align: center; }
|
||||
tr.R0 td.R51C7{ border-right: #000000 1px solid; }
|
||||
tr.R1{ height: 21px; }
|
||||
tr.R1 td.R1C5{ font-family: Arial; font-size: 6pt; font-style: normal; vertical-align: top; }
|
||||
tr.R1 td.R1C9{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: right; }
|
||||
tr.R2{ height: 17px; }
|
||||
tr.R2 td.R2C0{ font-family: Arial; font-size: 8pt; font-style: normal; vertical-align: top; }
|
||||
tr.R2 td.R2C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; vertical-align: medium; }
|
||||
tr.R2 td.R2C9{ text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R22{ height: 56px; }
|
||||
tr.R22 td.R22C0{ vertical-align: top; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R22 td.R22C2{ text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R22 td.R22C3{ text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R3{ height: 16px; }
|
||||
tr.R3 td.R14C2{ vertical-align: bottom; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R3 td.R15C1{ font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
tr.R3 td.R15C2{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R3 td.R15C8{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; vertical-align: bottom; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R3 td.R16C3{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R3 td.R17C2{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: right; vertical-align: medium; border-right: #000000 1px solid; }
|
||||
tr.R3 td.R17C3{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: center; vertical-align: medium; border-left: #000000 2px solid; border-top: #000000 2px solid; border-bottom: #000000 2px solid; border-right: #000000 1px solid; }
|
||||
tr.R3 td.R17C4{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: center; vertical-align: medium; border-left: #000000 1px solid; border-top: #000000 2px solid; border-bottom: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R3 td.R18C3{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: center; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; border-right: #ffffff 1px none; }
|
||||
tr.R3 td.R18C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; vertical-align: bottom; }
|
||||
tr.R3 td.R18C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R3 td.R31C5{ border-bottom: #ffffff 1px none; }
|
||||
tr.R3 td.R31C6{ border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R3 td.R3C0{ font-family: Arial; font-size: 8pt; font-style: normal; vertical-align: top; }
|
||||
tr.R3 td.R3C1{ font-family: Arial; font-size: 8pt; font-style: normal; vertical-align: bottom; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R3 td.R3C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; vertical-align: medium; }
|
||||
tr.R3 td.R3C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: medium; border-left: #000000 2px solid; border-top: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R3 td.R4C0{ text-align: right; }
|
||||
tr.R3 td.R4C6{ border-bottom: #000000 1px solid; }
|
||||
tr.R3 td.R4C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; }
|
||||
tr.R3 td.R4C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-top: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
tr.R3 td.R6C1{ font-family: Arial; font-size: 8pt; font-style: normal; vertical-align: bottom; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R3 td.R6C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; }
|
||||
tr.R3 td.R8C1{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; }
|
||||
tr.R3 td.R8C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R38{ height: 7px; }
|
||||
tr.R38 td.R50C7{ border-right: #000000 1px solid; }
|
||||
tr.R39{ height: 13px; }
|
||||
tr.R39 td.R39C10{ text-align: right; }
|
||||
tr.R39 td.R39C14{ text-align: center; }
|
||||
tr.R39 td.R39C4{ border-bottom: #000000 1px solid; }
|
||||
tr.R39 td.R39C7{ border-right: #000000 1px solid; }
|
||||
tr.R39 td.R41C0{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; }
|
||||
tr.R39 td.R41C11{ border-top: #ffffff 1px none; border-bottom: #000000 1px solid; }
|
||||
tr.R39 td.R41C2{ font-family: Arial; font-size: 8pt; font-style: normal; font-weight: bold; }
|
||||
tr.R40{ height: 14px; }
|
||||
tr.R40 td.R40C4{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; }
|
||||
tr.R40 td.R40C7{ border-right: #000000 1px solid; }
|
||||
tr.R45{ height: 12px; }
|
||||
tr.R45 td.R45C10{ border-left: #ffffff 0px none; border-top: #ffffff 1px none; }
|
||||
tr.R45 td.R45C11{ border-top: #ffffff 1px none; }
|
||||
tr.R45 td.R45C2{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; }
|
||||
tr.R45 td.R45C6{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none;}
|
||||
tr.R45 td.R45C6_1{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-right: #000000 1px solid; }
|
||||
tr.R5{ height: 15px; }
|
||||
tr.R5 td.R11C3{ font-family: Arial; font-size: 8pt; font-style: normal; vertical-align: bottom; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R13C8{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; vertical-align: bottom; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
|
||||
tr.R5 td.R33C17{ border-left: #000000 2px solid; border-top: #000000 2px solid; border-bottom: #000000 2px solid; border-right: #000000 2px solid; }
|
||||
tr.R5 td.R35C10{ border-top: #ffffff 1px none; }
|
||||
tr.R5 td.R35C9{ font-family: Arial; font-size: 6pt; font-style: normal; border-top: #ffffff 1px none; }
|
||||
tr.R5 td.R43C1{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R43C11{ border-bottom: #000000 1px solid; }
|
||||
tr.R5 td.R43C7{ border-right: #000000 1px solid; }
|
||||
tr.R5 td.R5C0{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-top: #ffffff 1px none; }
|
||||
tr.R5 td.R5C2{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R5C7{ font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
tr.R5 td.R5C9{ font-family: Arial; font-size: 9pt; font-style: normal; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
tr.R5 td.R9C0{ text-align: right; }
|
||||
tr.R5 td.R9C1{ font-family: Arial; font-size: 8pt; font-style: normal; text-align: right; }
|
||||
tr.R5 td.R9C3{ font-family: Arial; font-size: 8pt; font-style: normal; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R5 td.R9C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; }
|
||||
tr.R5 td.R9C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-top: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
tr.R7{ height: 19px; }
|
||||
tr.R7 td.R7C0{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-left: #ffffff 0px none; border-top: #ffffff 1px none; }
|
||||
tr.R7 td.R7C2{ font-family: Arial; font-size: 6pt; font-style: normal; text-align: center; vertical-align: top; border-left: #ffffff 1px none; border-top: #ffffff 1px none; border-bottom: #ffffff 1px none; }
|
||||
tr.R7 td.R7C7{ font-family: Arial; font-size: 9pt; font-style: normal; text-align: right; }
|
||||
tr.R7 td.R7C9{ font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-align: center; vertical-align: bottom; overflow: hidden;border-left: #000000 2px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 2px solid; }
|
||||
table {table-layout: fixed; padding: 0px; padding-left: 2px; vertical-align:bottom; border-collapse:collapse;width: 100%; font-family: Arial; font-size: 8pt; font-style: normal; }
|
||||
td { padding: 0px; padding-left: 2px; overflow:hidden; }
|
||||
|
||||
.cu_wspace { white-space:nowrap; }
|
||||
.cu_space21 { width:100%;height:30px;overflow:hidden; }
|
||||
.cu_space31 { width:100%;height:31px;overflow:hidden; }
|
||||
.cu_space11 { width:100%;height:15px;overflow:hidden; }
|
||||
.cu_space16 { width:100%;height:16px;overflow:hidden; }
|
||||
.cu_space19 { width:100%;height:19px;overflow:hidden; }
|
||||
.cu_space26 { width:100%;height:26px;overflow:hidden; }
|
||||
.cu_left { border-left: #ffffff 0px none; }
|
||||
.cu_space15 { width:100%;height:15px;overflow:hidden; }
|
||||
.cu_space70 { width:100%;height:70px;overflow:hidden; }
|
||||
.cu_space40 { width:100%;height:40px;overflow:hidden; }
|
||||
.cu_space7 { width:100%;height:7px;overflow:hidden; }
|
||||
.cu_space13 { width:100%;height:13px;overflow:hidden; }
|
||||
.cu_right { border-right: #000000 1px solid; }
|
||||
.cu_space14 { width:100%;height:14px;overflow:hidden; }
|
||||
.cu_space12 { width:100%;height:12px;overflow:hidden; }
|
||||
tbody, table, tr, td, th{border: none;}
|
||||
</STYLE>
|
||||
<!-- start header -->
|
||||
<TABLE CELLSPACING="0">
|
||||
<COL WIDTH="3%"/>
|
||||
<COL WIDTH="15%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="5%"/>
|
||||
<COL WIDTH="6%"/>
|
||||
<COL WIDTH="6%"/>
|
||||
<COL WIDTH="6%"/>
|
||||
<COL WIDTH="6%"/>
|
||||
<COL WIDTH="6%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<COL WIDTH="7%"/>
|
||||
<TR CLASS="R1">
|
||||
<TD CLASS="R1C9" COLSPAN="15"><DIV class="cu_space21"><SPAN class="cu_wspace">Унифицированная<![CDATA[ ]]>форма<![CDATA[ ]]>№<![CDATA[ ]]>ТОРГ-12<BR/>Утверждена<![CDATA[ ]]>постановлением<![CDATA[ ]]>Госкомстата<![CDATA[ ]]>России<![CDATA[ ]]>от<![CDATA[ ]]>25.12.98<![CDATA[ ]]>№<![CDATA[ ]]>132</SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R2">
|
||||
<TD CLASS="R2C0" COLSPAN="14"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R2C9"><SPAN class="cu_wspace">Коды</SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R3C1" COLSPAN="12" ROWSPAN="2"><DIV class="cu_space31"><t t-esc="helper.full_representation(company.partner_id)"/></DIV></TD>
|
||||
<TD CLASS="R3C7" COLSPAN="2"><SPAN class="cu_wspace">Форма<![CDATA[ ]]>по<![CDATA[ ]]>ОКУД<![CDATA[ ]]></SPAN></TD>
|
||||
<TD CLASS="R3C9"><SPAN class="cu_wspace">0330212</SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">по<![CDATA[ ]]>ОКПО</SPAN></TD>
|
||||
<TD CLASS="R4C9"><SPAN class="cu_wspace"><t t-esc="company.okpo or ''"/></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R5C2" COLSPAN="12"><DIV class="cu_space11"><SPAN class="cu_wspace">организация-грузоотправитель,<![CDATA[ ]]>адрес,<![CDATA[ ]]>телефон,<![CDATA[ ]]>факс,<![CDATA[ ]]>банковские<![CDATA[ ]]>реквизиты</SPAN></DIV></TD>
|
||||
<TD CLASS="R5C7" COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C9" ROWSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R6C1" COLSPAN="12"><DIV class="cu_space16"><SPAN class="cu_wspace"><!-- TO DO: ПредставлениеПодразделения --></SPAN></DIV></TD>
|
||||
<TD CLASS="R6C7" COLSPAN="2"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R6C7"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R7">
|
||||
<TD CLASS="R7C2" COLSPAN="12"><DIV class="cu_space19"><SPAN class="cu_wspace">структурное<![CDATA[ ]]>подразделение</SPAN></DIV></TD>
|
||||
<TD CLASS="R7C7" COLSPAN="2"><DIV class="cu_space19"><SPAN class="cu_wspace">Вид<![CDATA[ ]]>деятельности<![CDATA[ ]]>по<![CDATA[ ]]>ОКДП</SPAN></DIV></TD>
|
||||
<TD CLASS="R7C9"><DIV class="cu_space19"><SPAN class="cu_wspace"><!-- TO DO: ВидДеятельностиПоОКДП --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R8C1" COLSPAN="2">Грузополучатель</TD>
|
||||
<TD CLASS="R3C1" COLSPAN="10"><t t-esc="helper.full_representation(o.partner_id)"/></TD>
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">по<![CDATA[ ]]>ОКПО</SPAN></TD>
|
||||
<TD CLASS="R8C9"><SPAN class="cu_wspace"><t t-esc="o.partner_id.okpo or ''"/></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R9C0" COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C2" COLSPAN="10"><DIV class="cu_space11"><SPAN class="cu_wspace">организация,<![CDATA[ ]]>адрес,<![CDATA[ ]]>телефон,<![CDATA[ ]]>факс,<![CDATA[ ]]>банковские<![CDATA[ ]]>реквизиты</SPAN></DIV></TD>
|
||||
<TD CLASS="R9C7" COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R9C9" ROWSPAN="2"><DIV class="cu_space26"><SPAN class="cu_wspace"><t t-esc="company.okpo or ''"/></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">Поставщик</SPAN></TD>
|
||||
<TD CLASS="R3C1" COLSPAN="10"><t t-esc="helper.full_representation(company.partner_id)"/></TD>
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">по<![CDATA[ ]]>ОКПО</SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R9C0" COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C2" COLSPAN="10"><DIV class="cu_space11"><SPAN class="cu_wspace">организация,<![CDATA[ ]]>адрес,<![CDATA[ ]]>телефон,<![CDATA[ ]]>факс,<![CDATA[ ]]>банковские<![CDATA[ ]]>реквизиты</SPAN></DIV></TD>
|
||||
<TD COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R9C9" ROWSPAN="2"><DIV class="cu_space26"><SPAN class="cu_wspace"><t t-esc="o.partner_id.okpo or ''"/></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">Плательщик</SPAN></TD>
|
||||
<TD CLASS="R3C1" COLSPAN="10"><t t-esc="helper.full_representation(o.partner_id.parent_id or o.partner_id)"/></TD>
|
||||
<TD CLASS="R4C7" COLSPAN="2"><SPAN class="cu_wspace">по<![CDATA[ ]]>ОКПО</SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD CLASS="R9C0" COLSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C2" COLSPAN="10"><DIV class="cu_space11"><SPAN class="cu_wspace">организация,<![CDATA[ ]]>адрес,<![CDATA[ ]]>телефон,<![CDATA[ ]]>факс,<![CDATA[ ]]>банковские<![CDATA[ ]]>реквизиты</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"></DIV></TD>
|
||||
<TD CLASS="R13C8" ROWSPAN="2"><DIV class="cu_space26"><SPAN class="cu_wspace">номер</SPAN></DIV></TD>
|
||||
<TD CLASS="R9C9" ROWSPAN="2"><DIV class="cu_space26"><SPAN class="cu_wspace"><!-- TO DO: ОснованиеНомер --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R4C7" COLSPAN="2"><DIV class="cu_space16"><SPAN class="cu_wspace">Основание</SPAN></DIV></TD>
|
||||
<TD CLASS="R14C2" COLSPAN="10"><DIV class="cu_space16"><SPAN class="cu_wspace"><t t-esc="o.name or ''"/></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD COLSPAN="2"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R15C2" COLSPAN="10"><DIV class="cu_space16"><SPAN class="cu_wspace">договор,<![CDATA[ ]]>заказ-наряд</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R15C8"><DIV class="cu_space16"><SPAN class="cu_wspace">дата</SPAN></DIV></TD>
|
||||
<TD CLASS="R4C9"><DIV class="cu_space16"><SPAN class="cu_wspace"><!-- TO DO: ОснованиеДата --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD COLSPAN="5"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R16C3" COLSPAN="2"><DIV class="cu_space16"><SPAN class="cu_wspace">Номер<![CDATA[ ]]>документа</SPAN></DIV></TD>
|
||||
<TD CLASS="R16C3" COLSPAN="2"><DIV class="cu_space16"><SPAN class="cu_wspace">Дата<![CDATA[ ]]>составления</SPAN></DIV></TD>
|
||||
<TD CLASS="R6C7" COLSPAN="3"><DIV class="cu_space16"><SPAN class="cu_wspace">Транспортная<![CDATA[ ]]>накладная</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R15C8"><DIV class="cu_space16"><SPAN class="cu_wspace">номер</SPAN></DIV></TD>
|
||||
<TD CLASS="R4C9"><DIV class="cu_space16"><SPAN class="cu_wspace"><!-- TO DO: ТранспортнаяНакладнаяНомер --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R17C2" COLSPAN="5"><DIV class="cu_space16"><SPAN class="cu_wspace">ТОВАРНАЯ<![CDATA[ ]]>НАКЛАДНАЯ<![CDATA[ ]]><![CDATA[ ]]></SPAN></DIV></TD>
|
||||
<TD CLASS="R17C3" COLSPAN="2"><DIV class="cu_space16"><SPAN class="cu_wspace"><t t-esc="helper.numer(o.name)"/></SPAN></DIV></TD>
|
||||
<TD CLASS="R17C4" COLSPAN="2"><DIV class="cu_space16"><span class="cu_wspace" t-field="o.invoice_date"/></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R15C8"><DIV class="cu_space16"><SPAN class="cu_wspace">дата</SPAN></DIV></TD>
|
||||
<TD CLASS="R4C9"><DIV class="cu_space16"><SPAN class="cu_wspace"><!-- TO DO: ТранспортнаяНакладнаяДата --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R3">
|
||||
<TD CLASS="R4C7" COLSPAN="10"><DIV class="cu_space16"><SPAN class="cu_wspace"></SPAN></DIV></TD>
|
||||
<TD CLASS="R18C7" COLSPAN="4"><DIV class="cu_space16"><SPAN class="cu_wspace">Вид<![CDATA[ ]]>операции</SPAN></DIV></TD>
|
||||
<TD CLASS="R18C9"><DIV class="cu_space16"><SPAN class="cu_wspace"><!-- TO DO: ВидОперации --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R20C15" COLSPAN="15"><SPAN class="cu_wspace">Страница 1<!-- TO DO: НомерСтраницы --></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R21C1" ROWSPAN="2"><DIV class="cu_space70">Но-<BR/>мер<BR/>по по-<BR/>рядку </DIV></TD>
|
||||
<TD CLASS="R21C2" COLSPAN="2"><DIV class="cu_space15"><SPAN class="cu_wspace">Товар</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C2" COLSPAN="2"><DIV class="cu_space15"><SPAN class="cu_wspace">Единица<![CDATA[ ]]>измерения</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C1" ROWSPAN="2"><DIV class="cu_space70">Вид упаков<BR/>ки</DIV></TD>
|
||||
<TD CLASS="R21C2" COLSPAN="2"><DIV class="cu_space15"><SPAN class="cu_wspace">Количество</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C1" ROWSPAN="2"><DIV class="cu_space70">Масса брутто</DIV></TD>
|
||||
<TD CLASS="R21C2" ROWSPAN="2"><DIV class="cu_space70"><SPAN class="cu_wspace">Коли-<BR/>чество<![CDATA[ ]]><BR/>(масса<![CDATA[ ]]><BR/>нетто)</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C2" ROWSPAN="2"><DIV class="cu_space70"><SPAN class="cu_wspace">Цена,<BR/>руб.<![CDATA[ ]]>коп.</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C2" ROWSPAN="2"><DIV class="cu_space70"><SPAN class="cu_wspace">Сумма<![CDATA[ ]]>без<BR/>учета<![CDATA[ ]]>НДС,<BR/>руб.<![CDATA[ ]]>коп.</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C2" COLSPAN="2"><DIV class="cu_space15"><SPAN class="cu_wspace">НДС</SPAN></DIV></TD>
|
||||
<TD CLASS="R21C2" ROWSPAN="2"><DIV class="cu_space70"><SPAN class="cu_wspace">Сумма<![CDATA[ ]]>с<BR/>учетом<![CDATA[ ]]><BR/>НДС,<![CDATA[ ]]><BR/>руб.<![CDATA[ ]]>коп.</SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R22">
|
||||
<TD CLASS="R22C2">наименование, характеристика, сорт, артикул товара</TD>
|
||||
<TD CLASS="R22C3"><SPAN class="cu_wspace">код</SPAN></TD>
|
||||
<TD CLASS="R22C2">наиме- нование</TD>
|
||||
<TD CLASS="R22C2">код по ОКЕИ</TD>
|
||||
<TD CLASS="R22C2">в одном месте</TD>
|
||||
<TD CLASS="R22C2">мест,<BR/>штук</TD>
|
||||
<TD CLASS="R22C2">ставка, %</TD>
|
||||
<TD CLASS="R22C2">сумма, <BR/>руб. коп.</TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R23C1"><SPAN class="cu_wspace">1</SPAN></TD>
|
||||
<TD CLASS="R23C1"><SPAN class="cu_wspace">2</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">3</SPAN></TD>
|
||||
<TD CLASS="R23C1"><SPAN class="cu_wspace">4</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">5</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">6</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">7</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">8</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">9</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">10</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">11</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">12</SPAN></TD>
|
||||
<TD CLASS="R23C1"><SPAN class="cu_wspace">13</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">14</SPAN></TD>
|
||||
<TD CLASS="R23C3"><SPAN class="cu_wspace">15</SPAN></TD>
|
||||
</TR>
|
||||
<t t-set="page_quantity" t-value="sum([line.quantity for line in o.invoice_line_ids])" />
|
||||
<t t-set="total_quantity" t-value="sum([line.quantity for line in o.invoice_line_ids])"/>
|
||||
<t t-set="page_price_subtotal" t-value="sum([line.price_subtotal for line in o.invoice_line_ids])"/>
|
||||
<t t-set="total_price_subtotal" t-value="sum([line.price_subtotal for line in o.invoice_line_ids])"/>
|
||||
<t t-set="page_tax" t-value="sum([line.price_unit*line.quantity - line.price_subtotal for line in o.invoice_line_ids])"/>
|
||||
<t t-set="total_tax" t-value="sum([line.price_unit*line.quantity - line.price_subtotal for line in o.invoice_line_ids])"/>
|
||||
<t t-set="page_price_tax_subtotal" t-value="sum([line.price_unit*line.quantity for line in o.invoice_line_ids])"/>
|
||||
<t t-set="total_price_tax_subtotal" t-value="sum([line.price_unit*line.quantity for line in o.invoice_line_ids])"/>
|
||||
<tr CLASS="R0" t-foreach="o.invoice_line_ids" t-as="line">
|
||||
<TD CLASS="R25C1"><SPAN class="cu_wspace"><t t-esc="line_index+1"/></SPAN></TD>
|
||||
<TD CLASS="R25C2"><t t-esc="line.name or ''"/></TD>
|
||||
<TD CLASS="R25C3"><!-- TO DO: ТоварКод --></TD>
|
||||
<TD CLASS="R25C4"><SPAN class="cu_wspace"><t t-esc="line.product_uom_id.name or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C5">796<!-- TO DO: БазоваяЕдиницаКодПоОКЕИ --></TD>
|
||||
<TD CLASS="R25C6"><SPAN class="cu_wspace"><!-- TO DO: ВидУпаковки --></SPAN></TD>
|
||||
<TD CLASS="R25C7"><SPAN class="cu_wspace"><!-- TO DO: КоличествоВОдномМесте --></SPAN></TD>
|
||||
<TD CLASS="R25C8"><SPAN class="cu_wspace"><!-- TO DO: КоличествоМест --></SPAN></TD>
|
||||
<TD CLASS="R25C7"><SPAN class="cu_wspace"><!-- TO DO: МассаБрутто --></SPAN></TD>
|
||||
<TD CLASS="R25C10"><SPAN class="cu_wspace"><t t-esc="line.quantity or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C10"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(line.price_subtotal/line.quantity)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C12"><SPAN class="cu_wspace"><t t-esc="line.price_subtotal or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C13"><SPAN class="cu_wspace">18% <!-- TO DO: СтавкаНДС --></SPAN></TD>
|
||||
<TD CLASS="R25C14"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(line.price_unit*line.quantity - line.price_subtotal)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C15"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(line.price_unit*line.quantity)).replace('.',',') or ''"/></SPAN></TD>
|
||||
</tr>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R27C1"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R27C2"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R27C3"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R27C0"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R27C7" COLSPAN="3"><SPAN class="cu_wspace">Итого<![CDATA[ ]]></SPAN></TD>
|
||||
<TD CLASS="R27C8"><SPAN class="cu_wspace"><!-- TO DO: ИтогоКоличествоМест --></SPAN></TD>
|
||||
<TD CLASS="R27C8"><SPAN class="cu_wspace"><!-- TO DO: ИтогоМассаБрутто --></SPAN></TD>
|
||||
<TD CLASS="R27C8"><SPAN class="cu_wspace"><t t-esc="(('%.3f')%(page_quantity)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R27C11"><SPAN class="cu_wspace">Х</SPAN></TD>
|
||||
<TD CLASS="R27C12"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(page_price_subtotal)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R27C13"><SPAN class="cu_wspace">Х</SPAN></TD>
|
||||
<TD CLASS="R27C14"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(page_tax)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R27C15"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(page_price_tax_subtotal)).replace('.',',') or ''"/></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R29C7" COLSPAN="7"><SPAN class="cu_wspace">Всего<![CDATA[ ]]>по<![CDATA[ ]]>накладной<![CDATA[ ]]></SPAN></TD>
|
||||
<TD CLASS="R29C8"><SPAN class="cu_wspace"><!-- TO DO: ИтогМест --></SPAN></TD>
|
||||
<TD CLASS="R29C8"><SPAN class="cu_wspace"><!-- TO DO: ИтогМассаБрутто --></SPAN></TD>
|
||||
<TD CLASS="R29C8"><SPAN class="cu_wspace"><t t-esc="(('%.3f')%(total_quantity)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R29C11"><SPAN class="cu_wspace">Х</SPAN></TD>
|
||||
<TD CLASS="R25C10"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(total_price_subtotal)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R29C11"><SPAN class="cu_wspace">Х</SPAN></TD>
|
||||
<TD CLASS="R25C10"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(total_tax)).replace('.',',') or ''"/></SPAN></TD>
|
||||
<TD CLASS="R25C10"><SPAN class="cu_wspace"><t t-esc="(('%.2f')%(total_price_tax_subtotal)).replace('.',',') or ''"/></SPAN></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
<TABLE CELLSPACING="0">
|
||||
<COL WIDTH="17"/>
|
||||
<COL WIDTH="143"/>
|
||||
<COL WIDTH="130"/>
|
||||
<COL WIDTH="30"/>
|
||||
<COL WIDTH="122"/>
|
||||
<COL WIDTH="31"/>
|
||||
<COL WIDTH="216"/>
|
||||
<COL WIDTH="33"/>
|
||||
<COL WIDTH="34"/>
|
||||
<COL WIDTH="74"/>
|
||||
<COL WIDTH="60"/>
|
||||
<COL WIDTH="100"/>
|
||||
<COL WIDTH="30"/>
|
||||
<COL WIDTH="46"/>
|
||||
<COL WIDTH="40"/>
|
||||
<COL WIDTH="51"/>
|
||||
<COL WIDTH="30"/>
|
||||
<COL WIDTH="182"/>
|
||||
<TR CLASS="R3">
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space16"><SPAN class="cu_space11">Товарная<![CDATA[ ]]>накладная<![CDATA[ ]]>имеет<![CDATA[ ]]>приложение<![CDATA[ ]]>на</SPAN></DIV></TD>
|
||||
<TD CLASS="R31C5"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R31C6"><DIV class="cu_space16"><SPAN class="cu_space11"><!-- TO DO: КоличествоЛистовВПриложении --></SPAN></DIV></TD>
|
||||
<TD CLASS="R4C6"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R4C6"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R4C6"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space16"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space15"><SPAN class="cu_space11">и<![CDATA[ ]]>содержит</SPAN></DIV></TD>
|
||||
<TD CLASS="R32C3" COLSPAN="4"><DIV class="cu_space15"><SPAN class="cu_space11"><t t-esc="helper.in_words(o.invoice_line_ids and len(o.invoice_line_ids) or 0).capitalize()"/></SPAN></DIV></TD>
|
||||
<TD CLASS="R32C7"><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R32C8"><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R32C8"><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R32C8"><DIV class="cu_space15"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="8"><DIV class="cu_space15"><SPAN class="cu_space11">порядковых<![CDATA[ ]]>номеров<![CDATA[ ]]>записей</SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0" COLSPAN="8"><DIV class="cu_space11"><SPAN class="cu_wspace">прописью</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R33C17" ROWSPAN="3"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD COLSPAN="2"><SPAN class="cu_space11"><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]>Масса<![CDATA[ ]]>груза<![CDATA[ ]]>(нетто)</SPAN></TD>
|
||||
<TD CLASS="R34C8"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R34C8"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R34C8"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R34C8"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R34C8"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R34C8" COLSPAN="3"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0" COLSPAN="8"><DIV class="cu_space11"><SPAN class="cu_space11">прописью</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R33C17" ROWSPAN="2"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN class="cu_space11">Всего<![CDATA[ ]]>мест</SPAN></TD>
|
||||
<TD CLASS="R32C4"><SPAN class="cu_space"/></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD COLSPAN="2"><SPAN class="cu_space11"><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]>Масса<![CDATA[ ]]>груза<![CDATA[ ]]>(брутто)</SPAN></TD>
|
||||
<TD CLASS="R32C3" COLSPAN="8"><SPAN class="cu_space"><!-- TO DO: МассаГрузаПрописью --></SPAN></TD>
|
||||
<TD></TD>
|
||||
<TD></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0" COLSPAN="2"><DIV class="cu_space11"><SPAN class="cu_space11">прописью</SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0" COLSPAN="8"><DIV class="cu_space11"><SPAN class="cu_space11">прописью</SPAN></DIV></TD>
|
||||
<TD CLASS="R5C0"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R38">
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><![CDATA[ ]]></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R39">
|
||||
<TD><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space13"><SPAN class="cu_space11">Приложение<![CDATA[ ]]>(паспорта,<![CDATA[ ]]>сертификаты<![CDATA[ ]]>и<![CDATA[ ]]>т.п.)<![CDATA[ ]]>на<![CDATA[ ]]></SPAN></DIV></TD>
|
||||
<TD CLASS="R39C4"><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="2" class="cu_right"><DIV class="cu_space13"><SPAN class="cu_space11">листах</SPAN></DIV></TD>
|
||||
<TD CLASS="R39C10" COLSPAN="3"><DIV class="cu_space13"><SPAN class="cu_space11">По<![CDATA[ ]]>доверенности<![CDATA[ ]]>№</SPAN></DIV></TD>
|
||||
<TD CLASS="R39C4" COLSPAN="3"><DIV class="cu_space13"><SPAN class="cu_space11"><!-- TO DO: ДоверенностьНомер --></SPAN></DIV></TD>
|
||||
<TD CLASS="R39C14"><DIV class="cu_space13"><SPAN class="cu_space11">от</SPAN></DIV></TD>
|
||||
<TD CLASS="R39C4" COLSPAN="3"><DIV class="cu_space13"><SPAN class="cu_space11"><!-- TO DO: ДоверенностьДата --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R40">
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R40C4" COLSPAN="2"><DIV class="cu_space14"><SPAN class="cu_space11">прописью</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R40C7"><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space14"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R39">
|
||||
<TD CLASS="R41C0"><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R41C0" COLSPAN="2"><DIV class="cu_space13"><SPAN class="cu_space11">Всего<![CDATA[ ]]>отпущено<![CDATA[ ]]><![CDATA[ ]]>на<![CDATA[ ]]>сумму</SPAN></DIV></TD>
|
||||
<TD COLSPAN="5" class="cu_right"><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space13"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="2"><DIV class="cu_space13"><SPAN class="cu_space11">выданной</SPAN></DIV></TD>
|
||||
<TD CLASS="R41C11" COLSPAN="7"><DIV class="cu_space13"><SPAN class="cu_space11"><!-- TO DO: ДоверенностьВыдана --></SPAN></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R42C0"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R42C1" COLSPAN="6"><t t-esc="helper.rubles(o.amount_total).capitalize()"/></TD>
|
||||
<TD class="cu_right"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16" COLSPAN="7"><SPAN class="cu_wspace">кем,<![CDATA[ ]]>кому<![CDATA[ ]]>(организация,<![CDATA[ ]]>должность,<![CDATA[ ]]>фамилия,<![CDATA[ ]]>и.<![CDATA[ ]]>о.)</SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R5">
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C1" COLSPAN="6"><DIV class="cu_space11"><SPAN class="cu_wspace">прописью</SPAN></DIV></TD>
|
||||
<TD CLASS="R43C7"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C11"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C11"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C11" COLSPAN="3"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C11"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R43C11"><DIV class="cu_space11"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space11"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN class="cu_wspace">Отпуск<![CDATA[ ]]>груза<![CDATA[ ]]>разрешил</SPAN></TD>
|
||||
<TD CLASS="R44C2">Директор<!-- TO DO: ДолжностьРуководителя --></TD>
|
||||
<TD CLASS="R44C3"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8I"><SPAN><t t-raw="company.print_facsimile and (company.print_anywhere or context.get('mark_invoice_as_sent', False)) and helper.img(company.chief_id.facsimile) or ''"/></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R44C6"><t t-esc="helper.initials(company.chief_id.name)"/></TD>
|
||||
<TD CLASS="R44C6_1"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8" COLSPAN="7"><SPAN class="cu_wspace"><!-- TO DO: ДоверенностьЧерезКого --></SPAN></TD>
|
||||
</TR>
|
||||
<TR CLASS="R45">
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C2"><DIV class="cu_space12"><SPAN class="cu_wspace">должность</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C2"><DIV class="cu_space12"><SPAN class="cu_wspace">подпись</SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C6"><DIV class="cu_space12"><SPAN class="cu_wspace">расшифровка<![CDATA[ ]]>подписи</SPAN></DIV></TD>
|
||||
<TD CLASS="R45C6_1"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C10"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C11"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C11"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C11" COLSPAN="3"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C11"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R45C11"><DIV class="cu_space12"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space12"></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R46C0"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R46C0" COLSPAN="3"><SPAN class="cu_wspace">Главный<![CDATA[ ]]>(старший)<![CDATA[ ]]>бухгалтер</SPAN></TD>
|
||||
<TD CLASS="R32C8I"><SPAN><t t-raw="company.print_facsimile and (company.print_anywhere or context.get('mark_invoice_as_sent', False)) and helper.img(company.accountant_id.facsimile) or ''"/></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R44C6"><t t-esc="helper.initials(company.accountant_id.name)"/></TD>
|
||||
<TD CLASS="R44C6_1"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD COLSPAN="2"><SPAN class="cu_wspace">Груз<![CDATA[ ]]>принял</SPAN></TD>
|
||||
<TD CLASS="R32C8"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8" COLSPAN="3"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8"><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD></TD>
|
||||
<TD COLSPAN="3"></TD>
|
||||
<TD CLASS="R36C16">подпись</TD>
|
||||
<TD></TD>
|
||||
<TD CLASS="R47C6"><SPAN class="cu_wspace">расшифровка<![CDATA[ ]]>подписи</SPAN></TD>
|
||||
<TD CLASS="R47C6_1"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16"><SPAN class="cu_wspace">должность</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16" COLSPAN="3"><SPAN class="cu_wspace">подпись</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R47C17"><SPAN class="cu_wspace">расшифровка<![CDATA[ ]]>подписи</SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN class="cu_wspace">Отпуск<![CDATA[ ]]>груза<![CDATA[ ]]>произвел</SPAN></TD>
|
||||
<TD CLASS="R48C2"><!-- TO DO: ДолжностьКладовщика --></TD>
|
||||
<TD CLASS="R48C3"><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R44C6"><!-- TO DO: ФИОКладовщика --></TD>
|
||||
<TD CLASS="R44C6_1"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD COLSPAN="2"><SPAN class="cu_wspace">Груз<![CDATA[ ]]>получил<![CDATA[ ]]></SPAN></TD>
|
||||
<TD CLASS="R32C8"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8" COLSPAN="3"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R32C8"><SPAN></SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16"><SPAN class="cu_wspace">должность</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16"><SPAN class="cu_wspace">подпись</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R47C6"><SPAN class="cu_wspace">расшифровка<![CDATA[ ]]>подписи</SPAN></TD>
|
||||
<TD CLASS="R47C6_1"><SPAN></SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R20C0" COLSPAN="2"><SPAN class="cu_wspace">грузополучатель</SPAN></TD>
|
||||
<TD CLASS="R36C16"><SPAN class="cu_wspace">должность</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R36C16" COLSPAN="3"><SPAN class="cu_wspace">подпись</SPAN></TD>
|
||||
<TD><SPAN></SPAN></TD>
|
||||
<TD CLASS="R47C17"><SPAN class="cu_wspace">расшифровка<![CDATA[ ]]>подписи</SPAN></TD>
|
||||
<TD></TD>
|
||||
</TR>
|
||||
<TR CLASS="R38">
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD CLASS="R50C7"><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3"><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><SPAN></SPAN></DIV></TD>
|
||||
<TD><DIV class="cu_space7"><![CDATA[ ]]></DIV></TD>
|
||||
</TR>
|
||||
<TR CLASS="R0">
|
||||
<TD CLASS="R29C7S"><SPAN><t t-raw="company.print_stamp and (company.print_anywhere or context.get('mark_invoice_as_sent', False)) and helper.img(company.stamp) or ''"/></SPAN></TD>
|
||||
<TD CLASS="R29C7"><DIV class="cu_space15"><SPAN class="cu_wspace">М.П.</SPAN></DIV></TD>
|
||||
<TD CLASS="R29C7" COLSPAN="3"><DIV class="cu_space15"><SPAN class="cu_wspace"><t t-esc="helper.ru_date(o.invoice_date)"/><!-- TO DO: ДатаДокументаДень --></SPAN></DIV></TD>
|
||||
<TD COLSPAN="3" class="cu_right"><DIV class="cu_space15"><SPAN class="cu_wspace"><!-- TO DO: ДатаДокументаГод --></SPAN></DIV></TD>
|
||||
<TD CLASS="R51C10" COLSPAN="4"><DIV class="cu_space15"><SPAN class="cu_wspace">М.П.</SPAN></DIV></TD>
|
||||
<TD COLSPAN="7"><DIV class="cu_space15"><SPAN class="cu_wspace">"<![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]>"<![CDATA[ ]]>_____________<![CDATA[ ]]>20<![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]><![CDATA[ ]]>года</SPAN></DIV></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</data>
|
||||
</openerp>
|
@ -1,13 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models
|
||||
from odoo.addons.l10n_ru_doc.report_helper import QWebHelper
|
||||
class RuInvoiceReport(models.AbstractModel):
|
||||
_name = 'report.l10n_ru_doc.report_invoice'
|
||||
def _get_report_values(self, docids, data=None):
|
||||
docs = self.env['account.move'].browse(docids)
|
||||
return {
|
||||
'helper': QWebHelper(),
|
||||
'doc_ids': docs.ids,
|
||||
'doc_model': 'account.move',
|
||||
'docs': docs
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user