25.03.26
This commit is contained in:
98
AGENTS.md
Normal file
98
AGENTS.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# AGENTS.md
|
||||
|
||||
Guide rapide pour les agents qui codent dans ce repository.
|
||||
|
||||
## 1) Contexte du projet
|
||||
|
||||
- Codebase Tryton monolithique (coeur + modules metier).
|
||||
- Noyau serveur a la racine: `application.py`, `wsgi.py`, `admin.py`, `worker.py`, `cron.py`.
|
||||
- Couches framework importantes:
|
||||
- ORM: `model/`
|
||||
- Meta/systeme (`ir`): `ir/`
|
||||
- Protocoles RPC: `protocols/`
|
||||
- Backend DB: `backend/`
|
||||
- Modules metier: `modules/<module_name>/` (~220 modules).
|
||||
|
||||
## 2) Regles de travail pour agent
|
||||
|
||||
- Ne jamais toucher des fichiers sans rapport avec la demande.
|
||||
- Limiter le scope de modif au minimum necessaire.
|
||||
- Respecter le style existant du module cible.
|
||||
- Ne pas supprimer du code legacy sans verifier les usages.
|
||||
- Si comportement incertain: preferer un patch conservateur + test.
|
||||
|
||||
## 3) Zones de bruit a ignorer pendant l'exploration
|
||||
|
||||
- `.venv/`
|
||||
- `__pycache__/`
|
||||
- `build/` (quand present dans des sous-modules)
|
||||
- Fichiers temporaires editeur (ex: `*.swp`)
|
||||
|
||||
## 4) Comment choisir ou coder selon le besoin
|
||||
|
||||
- Si bug ORM/champs:
|
||||
- Lire `model/fields/*.py` et les tests `tests/test_field_*.py`.
|
||||
- Si bug transaction/DB:
|
||||
- Lire `transaction.py`, `backend/*/database.py`, `tests/test_backend.py`.
|
||||
- Si bug API/RPC/HTTP:
|
||||
- Lire `wsgi.py`, `rpc.py`, `protocols/*`, `tests/test_rpc.py`, `tests/test_wsgi.py`.
|
||||
- Si bug metier:
|
||||
- Modifier uniquement `modules/<module>/` + ses tests.
|
||||
|
||||
## 5) Workflow de modification (obligatoire)
|
||||
|
||||
1. Identifier le module et le flux impacte.
|
||||
2. Localiser un test existant proche du comportement a changer.
|
||||
3. Implementer le plus petit patch possible.
|
||||
4. Ajouter/adapter les tests au plus pres du changement.
|
||||
5. Lancer la validation ciblee (pas toute la suite si inutile).
|
||||
6. Donner un resume du risque residuel.
|
||||
|
||||
## 6) Checklist avant de rendre une modif
|
||||
|
||||
- Le changement est-il limite au domaine demande ?
|
||||
- Le comportement existant non cible est-il preserve ?
|
||||
- Les droits/regles (`ir.rule`, acces) sont-ils impactes ?
|
||||
- Les vues XML et labels sont-ils coherents si un champ change ?
|
||||
- Les tests modifies couvrent-ils le bug/la feature ?
|
||||
- Le message de commit (si demande) explique clairement le pourquoi ?
|
||||
|
||||
## 7) Tests: point de depart pratique
|
||||
|
||||
- Suite coeur: `tests/test_tryton.py`
|
||||
- Tests coeur par domaine: `tests/test_*.py`
|
||||
- Tests module:
|
||||
- `modules/<module>/tests/test_module.py`
|
||||
- `modules/<module>/tests/test_scenario.py`
|
||||
- `modules/<module>/tests/scenario_*.rst`
|
||||
|
||||
Quand possible, lancer d'abord la cible minimale:
|
||||
|
||||
- fichier de test touche
|
||||
- puis fichier voisin de regression
|
||||
- puis suite plus large uniquement si necessaire
|
||||
|
||||
## 8) Contrat de sortie attendu de l'agent
|
||||
|
||||
Toujours fournir:
|
||||
|
||||
- Liste des fichiers modifies
|
||||
- Resume fonctionnel (ce qui change)
|
||||
- Resume technique (pourquoi ce design)
|
||||
- Tests executes + resultat
|
||||
- Risques residuels et impacts potentiels
|
||||
|
||||
## 9) Cas sensibles (demander confirmation humaine)
|
||||
|
||||
- Changement schema/structure de donnees
|
||||
- Changement de logique de securite/acces
|
||||
- Changement de comportement transverse (transaction, pool, RPC, worker)
|
||||
- Refactor multi-modules sans ticket explicite
|
||||
|
||||
## 10) Raccourci de demarrage pour agent
|
||||
|
||||
1. Lire ce fichier.
|
||||
2. Lire le(s) fichier(s) touche(s) et leurs tests.
|
||||
3. Proposer le patch minimal.
|
||||
4. Implementer + tester cible.
|
||||
5. Rendre avec le contrat de sortie (section 8).
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
|
||||
<office:meta><dc:title>Invoice no</dc:title><meta:initial-creator>willen</meta:initial-creator><dc:creator>Rizza Deborah</dc:creator><meta:creation-date>2018-12-09T16:20:00</meta:creation-date><dc:date>2025-06-20T10:50:00</dc:date><meta:print-date>2007-08-28T18:19:00</meta:print-date><meta:document-statistic meta:table-count="10" meta:image-count="2" meta:object-count="0" meta:page-count="2" meta:paragraph-count="59" meta:word-count="172" meta:character-count="1488"/><meta:generator>LibreOffice/7.6.0.3$Windows_X86_64 LibreOffice_project/69edd8b8ebc41d00b4de3915dc82f8f0fc3b6265</meta:generator></office:meta>
|
||||
<office:meta><dc:title>Invoice no</dc:title><meta:initial-creator>willen</meta:initial-creator><meta:creation-date>2018-12-09T16:20:00</meta:creation-date><dc:date>2026-03-23T20:46:35.300000000</dc:date><meta:print-date>2007-08-28T18:19:00</meta:print-date><meta:generator>LibreOffice/7.6.0.3$Windows_X86_64 LibreOffice_project/69edd8b8ebc41d00b4de3915dc82f8f0fc3b6265</meta:generator><meta:editing-duration>PT22M49S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="10" meta:image-count="2" meta:object-count="0" meta:page-count="2" meta:paragraph-count="63" meta:word-count="242" meta:character-count="2781" meta:non-whitespace-character-count="2210"/></office:meta>
|
||||
<office:settings>
|
||||
<config:config-item-set config:name="ooo:view-settings">
|
||||
<config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
|
||||
<config:config-item config:name="ViewAreaTop" config:type="long">9172</config:config-item>
|
||||
<config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
|
||||
<config:config-item config:name="ViewAreaWidth" config:type="long">43623</config:config-item>
|
||||
<config:config-item config:name="ViewAreaHeight" config:type="long">21098</config:config-item>
|
||||
@@ -13,12 +13,12 @@
|
||||
<config:config-item-map-indexed config:name="Views">
|
||||
<config:config-item-map-entry>
|
||||
<config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
|
||||
<config:config-item config:name="ViewLeft" config:type="long">11640</config:config-item>
|
||||
<config:config-item config:name="ViewTop" config:type="long">3900</config:config-item>
|
||||
<config:config-item config:name="ViewLeft" config:type="long">19516</config:config-item>
|
||||
<config:config-item config:name="ViewTop" config:type="long">16919</config:config-item>
|
||||
<config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
|
||||
<config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
|
||||
<config:config-item config:name="VisibleTop" config:type="long">9172</config:config-item>
|
||||
<config:config-item config:name="VisibleRight" config:type="long">43621</config:config-item>
|
||||
<config:config-item config:name="VisibleBottom" config:type="long">21096</config:config-item>
|
||||
<config:config-item config:name="VisibleBottom" config:type="long">30268</config:config-item>
|
||||
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
|
||||
<config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item>
|
||||
<config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
|
||||
@@ -91,7 +91,7 @@
|
||||
<config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
|
||||
<config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
|
||||
<config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
|
||||
<config:config-item config:name="Rsid" config:type="int">84510</config:config-item>
|
||||
<config:config-item config:name="Rsid" config:type="int">84841</config:config-item>
|
||||
<config:config-item config:name="RsidRoot" config:type="int">84510</config:config-item>
|
||||
<config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
|
||||
<config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
|
||||
@@ -152,6 +152,7 @@
|
||||
<style:font-face style:name="Arial1" svg:font-family="Arial, Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
||||
<style:font-face style:name="Calibri" svg:font-family="Calibri, 'Century Gothic'" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
||||
<style:font-face style:name="FuturaBookATT" svg:font-family="FuturaBookATT, 'Century Gothic'" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
||||
<style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
||||
<style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="swiss"/>
|
||||
<style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
|
||||
<style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/>
|
||||
@@ -161,14 +162,14 @@
|
||||
<office:styles>
|
||||
<style:default-style style:family="graphic">
|
||||
<style:graphic-properties svg:stroke-color="#808080" draw:fill-color="#cfe7f5" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" style:flow-with-text="true"/>
|
||||
<style:paragraph-properties style:text-autospace="none" style:line-break="strict" loext:tab-stop-distance="0cm" style:font-independent-line-spacing="false">
|
||||
<style:paragraph-properties style:text-autospace="none" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
|
||||
<style:tab-stops/>
|
||||
</style:paragraph-properties>
|
||||
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="fr" fo:country="CH" style:font-name-asian="Times New Roman" style:font-size-asian="12pt" style:language-asian="fr" style:country-asian="CH" style:font-name-complex="Times New Roman" style:font-size-complex="12pt" style:language-complex="fr" style:country-complex="CH"/>
|
||||
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="fr" fo:country="CH" style:letter-kerning="true" style:font-name-asian="Times New Roman" style:font-size-asian="12pt" style:language-asian="fr" style:country-asian="CH" style:font-name-complex="Times New Roman" style:font-size-complex="12pt" style:language-complex="fr" style:country-complex="CH"/>
|
||||
</style:default-style>
|
||||
<style:default-style style:family="paragraph">
|
||||
<style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="none" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.249cm" style:writing-mode="page"/>
|
||||
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="fr" fo:country="CH" style:font-name-asian="Times New Roman" style:font-size-asian="12pt" style:language-asian="fr" style:country-asian="CH" style:font-name-complex="Times New Roman" style:font-size-complex="12pt" style:language-complex="fr" style:country-complex="CH" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="no-limit" loext:hyphenation-zone="no-limit"/>
|
||||
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="fr" fo:country="CH" style:letter-kerning="true" style:font-name-asian="Times New Roman" style:font-size-asian="12pt" style:language-asian="fr" style:country-asian="CH" style:font-name-complex="Times New Roman" style:font-size-complex="12pt" style:language-complex="fr" style:country-complex="CH" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="no-limit" loext:hyphenation-zone="no-limit"/>
|
||||
</style:default-style>
|
||||
<style:default-style style:family="table">
|
||||
<style:table-properties table:border-model="collapsing"/>
|
||||
@@ -285,14 +286,17 @@
|
||||
<style:style style:name="Nessuna_20_spaziatura_20_Carattere" style:display-name="Nessuna spaziatura Carattere" style:family="text" style:parent-style-name="Default_20_Paragraph_20_Font">
|
||||
<style:text-properties style:font-name="Calibri" fo:font-family="Calibri, 'Century Gothic'" style:font-family-generic="swiss" style:font-pitch="variable" fo:language="it" fo:country="IT" style:font-name-asian="Times New Roman" style:font-family-asian="'Times New Roman', Times" style:font-family-generic-asian="roman" style:font-pitch-asian="variable" style:language-asian="en" style:country-asian="US" style:font-name-complex="Calibri" style:font-family-complex="Calibri, 'Century Gothic'" style:font-family-generic-complex="swiss" style:font-pitch-complex="variable"/>
|
||||
</style:style>
|
||||
<style:style style:name="Placeholder" style:family="text">
|
||||
<style:text-properties fo:font-variant="small-caps" fo:color="#008080" loext:opacity="100%" style:text-underline-style="dotted" style:text-underline-width="auto" style:text-underline-color="font-color"/>
|
||||
</style:style>
|
||||
<style:style style:name="Frame" style:family="graphic">
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" draw:fill="none"/>
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:background-color="transparent" draw:fill="none"/>
|
||||
</style:style>
|
||||
<style:style style:name="Graphics" style:family="graphic">
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" draw:fill="none"/>
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" fo:background-color="transparent" draw:fill="none"/>
|
||||
</style:style>
|
||||
<style:style style:name="OLE" style:family="graphic">
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" draw:fill="none"/>
|
||||
<style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" fo:background-color="transparent" draw:fill="none"/>
|
||||
</style:style>
|
||||
<text:outline-style style:name="Outline">
|
||||
<text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
|
||||
@@ -566,6 +570,12 @@
|
||||
<style:text-properties style:font-size-complex="8pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P7" style:family="paragraph" style:parent-style-name="header">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
</style:style>
|
||||
<style:style style:name="P8" style:family="paragraph" style:parent-style-name="footer">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
</style:style>
|
||||
<style:style style:name="P9" style:family="paragraph" style:parent-style-name="header">
|
||||
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb">
|
||||
<style:tab-stops>
|
||||
<style:tab-stop style:position="8.752cm"/>
|
||||
@@ -575,170 +585,138 @@
|
||||
</style:paragraph-properties>
|
||||
<style:text-properties fo:color="#1d1b11" loext:opacity="100%" style:font-name="FuturaBookATT" fo:font-size="8pt" fo:language="none" fo:country="none" fo:text-shadow="1pt 1pt" style:font-name-asian="FuturaBookATT" style:font-size-asian="8pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="FuturaBookATT" style:font-size-complex="8pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:language="en" fo:country="US"/>
|
||||
</style:style>
|
||||
<style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:language="en" fo:country="US" text:display="none"/>
|
||||
</style:style>
|
||||
<style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P17" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P18" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" fo:font-weight="bold" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-name-complex="Arial1" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
|
||||
</style:style>
|
||||
<style:style style:name="P19" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" fo:font-weight="bold" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
|
||||
</style:style>
|
||||
<style:style style:name="P20" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P21" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P22" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P23" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt" text:display="none"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P24" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P25" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt" text:display="none"/>
|
||||
</style:style>
|
||||
<style:style style:name="P26" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P27" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="fr" fo:country="CH" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P28" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="fr" fo:country="CH" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="fr" fo:country="CH" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P29" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="none" fo:country="none" fo:font-weight="bold" style:font-size-asian="10pt" style:language-asian="none" style:country-asian="none" style:font-weight-asian="bold" style:font-name-complex="Arial1" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
|
||||
</style:style>
|
||||
<style:style style:name="P30" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P32" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="end" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:font-weight="bold" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
|
||||
</style:style>
|
||||
<style:style style:name="P31" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="1pt" fo:language="en" fo:country="US" style:font-size-asian="1pt" style:font-size-complex="1pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P32" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="1pt" fo:language="en" fo:country="US" style:font-size-asian="1pt" style:font-name-complex="Times New Roman" style:font-size-complex="1pt" text:display="none"/>
|
||||
</style:style>
|
||||
<style:style style:name="P33" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P35" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="1pt" fo:language="en" fo:country="GB" style:font-size-asian="1pt" style:font-size-complex="1pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P34" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P36" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="1pt" fo:language="en" fo:country="GB" style:font-size-asian="1pt" style:font-name-complex="Arial1" style:font-size-complex="1pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P35" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P37" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="5pt" fo:language="en" fo:country="GB" style:font-size-asian="5pt" style:font-name-complex="Arial1" style:font-size-complex="5pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P36" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P38" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="5pt" fo:language="en" fo:country="GB" style:font-size-asian="5pt" style:font-size-complex="5pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P37" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:text-transform="uppercase" fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P38" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:language="en" fo:country="GB"/>
|
||||
</style:style>
|
||||
<style:style style:name="P39" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P40" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:language="en" fo:country="GB"/>
|
||||
</style:style>
|
||||
<style:style style:name="P41" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P42" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P43" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P44" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="en" fo:country="US" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P45" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="fr" fo:country="CH" style:font-size-asian="10pt" style:font-name-complex="Times New Roman" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P46" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:font-size="10pt" fo:language="fr" fo:country="CH" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P47" style:family="paragraph" style:parent-style-name="Standard">
|
||||
<style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:line-height="100%" fo:text-align="center" style:justify-single-word="false" style:writing-mode="lr-tb"/>
|
||||
<style:text-properties fo:text-transform="uppercase" fo:font-size="10pt" fo:language="en" fo:country="GB" style:font-size-asian="10pt" style:font-name-complex="Arial1" style:font-size-complex="10pt"/>
|
||||
</style:style>
|
||||
<style:style style:name="P48" style:family="paragraph" style:parent-style-name="footer">
|
||||
<style:style style:name="P42" style:family="paragraph" style:parent-style-name="footer">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
</style:style>
|
||||
<style:style style:name="P49" style:family="paragraph" style:parent-style-name="header">
|
||||
<style:style style:name="P43" style:family="paragraph" style:parent-style-name="header">
|
||||
<style:paragraph-properties style:writing-mode="lr-tb"/>
|
||||
</style:style>
|
||||
<style:style style:name="T1" style:family="text">
|
||||
@@ -3797,8 +3775,6 @@
|
||||
</office:master-styles>
|
||||
<office:body>
|
||||
<office:text text:use-soft-page-breaks="true">
|
||||
<text:p text:style-name="P9"><text:placeholder text:placeholder-type="text"><replace text:p=\'set_lang(invoice.party.lang)\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P9"><text:placeholder text:placeholder-type="text"><replace text:p=\'invoice.set_lang(invoice.party.lang)\'></text:placeholder></text:p>
|
||||
<text:sequence-decls>
|
||||
<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
|
||||
<text:sequence-decl text:display-outline-level="0" text:name="Table"/>
|
||||
@@ -3806,23 +3782,25 @@
|
||||
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
|
||||
<text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
|
||||
</text:sequence-decls>
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><replace text:p=\'set_lang(invoice.party.lang)\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><replace text:p=\'invoice.set_lang(invoice.party.lang)\'></text:placeholder></text:p>
|
||||
<table:table table:name="Tableau1" table:style-name="Tableau1">
|
||||
<table:table-column table:style-name="Tableau1.A"/>
|
||||
<table:table-row table:style-name="Tableau1.1">
|
||||
<table:table-cell table:style-name="Tableau1.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><for each='line in invoice.invoice_address.full_address.split(chr(10))'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><line></text:placeholder></text:p>
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p>
|
||||
<text:p text:style-name="P12"><text:s/></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><for each='line in invoice.invoice_address.full_address.split('\n')"></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><line></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p>
|
||||
<text:p text:style-name="P14"><text:s/></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P33"/>
|
||||
<text:p text:style-name="P35"/>
|
||||
<table:table table:name="Tableau2" table:style-name="Tableau2">
|
||||
<table:table-column table:style-name="Tableau2.A"/>
|
||||
<table:table-row table:style-name="Tableau2.1">
|
||||
<table:table-cell table:style-name="Tableau2.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><format_date(invoice.invoice_date or today, invoice.party.lang)></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><format_date(invoice.invoice_date or today, invoice.party.lang)></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
@@ -3831,238 +3809,244 @@
|
||||
<table:table-column table:style-name="Tableau3.B"/>
|
||||
<table:table-row table:style-name="Tableau3.1">
|
||||
<table:table-cell table:style-name="Tableau3.A1" office:value-type="string">
|
||||
<text:p text:style-name="P18"/>
|
||||
<text:p text:style-name="P18">Invoice N°</text:p>
|
||||
<text:p text:style-name="P20"/>
|
||||
<text:p text:style-name="P20">Invoice N°</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau3.A1" office:value-type="string">
|
||||
<text:p text:style-name="P18"/>
|
||||
<text:p text:style-name="P18"><text:placeholder text:placeholder-type="text"><invoice.number and invoice.number or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P20"/>
|
||||
<text:p text:style-name="P20"><text:placeholder text:placeholder-type="text"><invoice.number></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau3.1">
|
||||
<table:table-cell table:style-name="Tableau3.A1" office:value-type="string">
|
||||
<text:p text:style-name="P18">Contract N°</text:p>
|
||||
<text:p text:style-name="P20">Contract N°</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau3.A1" office:value-type="string">
|
||||
<text:p text:style-name="P18"><text:placeholder text:placeholder-type="text"><invoice.origins or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P20"><text:placeholder text:placeholder-type="text"><invoice.origins or ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P35"/>
|
||||
<text:p text:style-name="P37"/>
|
||||
<table:table table:name="Tableau4" table:style-name="Tableau4">
|
||||
<table:table-column table:style-name="Tableau4.A"/>
|
||||
<table:table-column table:style-name="Tableau4.B"/>
|
||||
<table:table-row table:style-name="Tableau4.1">
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">Name of the vessel</text:p>
|
||||
<text:p text:style-name="P14">Name of the vessel</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P27"><text:placeholder text:placeholder-type="text"><invoice.description or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P29"><text:placeholder text:placeholder-type="text"><invoice.description or ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau4.1">
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">N° of Bill of Lading</text:p>
|
||||
<text:p text:style-name="P14">N° of Bill of Lading</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12"><text:placeholder text:placeholder-type="text"><invoice.reference or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P14"><text:placeholder text:placeholder-type="text"><invoice.reference or ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau4.1">
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">Shipped on board date</text:p>
|
||||
<text:p text:style-name="P12">Port of loading</text:p>
|
||||
<text:p text:style-name="P14">Shipped on board date</text:p>
|
||||
<text:p text:style-name="P14">Port of loading</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">14.06.2025</text:p>
|
||||
<text:p text:style-name="P12">SANTOS, BRAZIL</text:p>
|
||||
<text:p text:style-name="P14">14.06.2025</text:p>
|
||||
<text:p text:style-name="P14">SANTOS, BRAZIL</text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau4.1">
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">Port of discharge</text:p>
|
||||
<text:p text:style-name="P14">Port of discharge</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau4.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">PORT QASIM, PAKISTAN</text:p>
|
||||
<text:p text:style-name="P14">PORT QASIM, PAKISTAN</text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P35"/>
|
||||
<text:p text:style-name="P37"/>
|
||||
<table:table table:name="Tableau5" table:style-name="Tableau5">
|
||||
<table:table-column table:style-name="Tableau5.A"/>
|
||||
<table:table-column table:style-name="Tableau5.B"/>
|
||||
<table:table-row table:style-name="Tableau5.1">
|
||||
<table:table-cell table:style-name="Tableau5.A1" office:value-type="string">
|
||||
<text:p text:style-name="P21">Goods description</text:p>
|
||||
<text:p text:style-name="P23">Goods description</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau5.A1" office:value-type="string">
|
||||
<text:p text:style-name="P22">QUANTITY: 2,253,035 LBS (1,021.970 MTS)</text:p>
|
||||
<text:p text:style-name="P17">OF BRAZILIAN GINNED COTTON BCI CROP 2024</text:p>
|
||||
<text:p text:style-name="P17">AT THE RATE OF USC 74.15 PER LB</text:p>
|
||||
<text:p text:style-name="P28">H.S CODE 5201.0090</text:p>
|
||||
<text:p text:style-name="P28">CFR PORT QASIM, PAKISTAN </text:p>
|
||||
<text:p text:style-name="P25"><text:span text:style-name="T1">ALL DETAILS AND SPECIFICATIONS AS PER</text:span><text:span text:style-name="T3"> BENEFICIARY’S </text:span></text:p>
|
||||
<text:p text:style-name="P22">PROFORMA INVOICE NO. 1411-1 DATED 20-05-2025.</text:p>
|
||||
<text:p text:style-name="P24">QUANTITY: 2,253,035 LBS (1,021.970 MTS)</text:p>
|
||||
<text:p text:style-name="P19">OF BRAZILIAN GINNED COTTON BCI CROP 2024</text:p>
|
||||
<text:p text:style-name="P19">AT THE RATE OF USC 74.15 PER LB</text:p>
|
||||
<text:p text:style-name="P30">H.S CODE 5201.0090</text:p>
|
||||
<text:p text:style-name="P30">CFR PORT QASIM, PAKISTAN </text:p>
|
||||
<text:p text:style-name="P27"><text:span text:style-name="T1">ALL DETAILS AND SPECIFICATIONS AS PER</text:span><text:span text:style-name="T3"> BENEFICIARY’S </text:span></text:p>
|
||||
<text:p text:style-name="P24">PROFORMA INVOICE NO. 1411-1 DATED 20-05-2025.</text:p>
|
||||
<text:p text:style-name="P24"/>
|
||||
<text:p text:style-name="P22"/>
|
||||
<text:p text:style-name="P20"/>
|
||||
<text:p text:style-name="P32"/>
|
||||
<text:p text:style-name="P31"/>
|
||||
<text:p text:style-name="P32"/>
|
||||
<text:p text:style-name="P31"/>
|
||||
<text:p text:style-name="P10"/>
|
||||
<text:p text:style-name="P34"/>
|
||||
<text:p text:style-name="P33"/>
|
||||
<text:p text:style-name="P34"/>
|
||||
<text:p text:style-name="P33"/>
|
||||
<text:p text:style-name="P12"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P36"/>
|
||||
<text:p text:style-name="P38"/>
|
||||
<table:table table:name="Tableau6" table:style-name="Tableau6">
|
||||
<table:table-column table:style-name="Tableau6.A" table:number-columns-repeated="5"/>
|
||||
<table:table-row table:style-name="Tableau6.1">
|
||||
<table:table-cell table:style-name="Tableau6.A1" office:value-type="string">
|
||||
<text:p text:style-name="P13"><text:s text:c="19"/>BALES</text:p>
|
||||
<text:p text:style-name="P15"><text:s text:c="19"/>BALES</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A1" office:value-type="string">
|
||||
<text:p text:style-name="P37"><text:s text:c="13"/>Gross KGS</text:p>
|
||||
<text:p text:style-name="P39"><text:s text:c="13"/>Gross KGS</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A1" office:value-type="string">
|
||||
<text:p text:style-name="P13"><text:s text:c="13"/>NET KGS</text:p>
|
||||
<text:p text:style-name="P15"><text:s text:c="13"/>NET KGS</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A1" office:value-type="string">
|
||||
<text:p text:style-name="P37"><text:s text:c="9"/></text:p>
|
||||
<text:p text:style-name="P39"><text:s text:c="9"/></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A1" office:value-type="string">
|
||||
<text:p text:style-name="P15"/>
|
||||
<text:p text:style-name="P17"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau6.1">
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><format_number(invoice.lines[0].quantity, invoice.party.lang) if invoice.lines else ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text"><format_number(invoice.lines[0].quantity, invoice.party.lang) if invoice.lines else ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><invoice.lines[0].gross_weight if (invoice.lines and hasattr(invoice.lines[0], \'gross_weight\')) else ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P15"><text:placeholder text:placeholder-type="text"><invoice.lines[0].gross_weight if (invoice.lines and hasattr(invoice.lines[0], \'gross_weight\')) else ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P26"><text:placeholder text:placeholder-type="text"><format_number_symbol(invoice.lines[0].quantity, invoice.party.lang, invoice.lines[0].unit) if (invoice.lines and invoice.lines[0].unit) else (format_number(invoice.lines[0].quantity, invoice.party.lang) if invoice.lines else '')></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P14"/>
|
||||
<text:p text:style-name="P28"><text:placeholder text:placeholder-type="text"><format_number_symbol(invoice.lines[0].quantity, invoice.party.lang, invoice.lines[0].unit) if (invoice.lines and invoice.lines[0].unit) else (format_number(invoice.lines[0].quantity, invoice.party.lang) if invoice.lines else '')></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P16"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau6.A2" office:value-type="string">
|
||||
<text:p text:style-name="P18"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P12"/>
|
||||
<text:p text:style-name="P14"/>
|
||||
<table:table table:name="Tableau7" table:style-name="Tableau7">
|
||||
<table:table-column table:style-name="Tableau7.A" table:number-columns-repeated="5"/>
|
||||
<table:table-row table:style-name="Tableau7.1">
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P14"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P14"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P14">Equivalent to LBS</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P14"><text:placeholder text:placeholder-type="text"><format_number(invoice.lines[0].quantity * 2.20462, invoice.party.lang) if invoice.lines else ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P16"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P16"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P16">Equivalent to LBS</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P16"><text:placeholder text:placeholder-type="text"><format_number(invoice.lines[0].quantity * 2.20462, invoice.party.lang) if invoice.lines else ''></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau7.A1" office:value-type="string">
|
||||
<text:p text:style-name="P18"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P33"/>
|
||||
<text:p text:style-name="P35"/>
|
||||
<table:table table:name="Tableau8" table:style-name="Tableau8">
|
||||
<table:table-column table:style-name="Tableau8.A"/>
|
||||
<table:table-column table:style-name="Tableau8.B"/>
|
||||
<table:table-row table:style-name="Tableau8.1">
|
||||
<table:table-cell table:style-name="Tableau8.A1" office:value-type="string">
|
||||
<text:p text:style-name="P12">At <text:placeholder text:placeholder-type="text"><format_currency(invoice.lines[0].unit_price, invoice.party.lang, invoice.currency, digits=invoice.lines[0].__class__.unit_price.digits[1]) if invoice.lines else \'\'></text:placeholder> PER LB</text:p>
|
||||
<text:p text:style-name="P12"/>
|
||||
<text:p text:style-name="P12">FREIGHT VALUE: <text:placeholder text:placeholder-type="text"><invoice.currency.symbol if invoice.currency else 'USD'></text:placeholder> <text:placeholder text:placeholder-type="text"><format_number(invoice.freight_amount, invoice.party.lang) if hasattr(invoice, \'freight_amount\') else \'\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P12"/>
|
||||
<text:p text:style-name="P12">WE CERTIFY THAT THE MERCHANDISE IS OF BRAZIL ORIGIN</text:p>
|
||||
<text:p text:style-name="P27">L/C NUMBER <text:placeholder text:placeholder-type="text"><invoice.reference or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P27">IMPORTER H.S. CODE NOS. <text:placeholder text:placeholder-type="text"><invoice.party_tax_identifier.type_string if invoice.party_tax_identifier else \'5201.0090\'></text:placeholder> </text:p>
|
||||
<text:p text:style-name="P27">IMPORTER’S NTN <text:placeholder text:placeholder-type="text"><invoice.party_tax_identifier.code if invoice.party_tax_identifier else \'\'></text:placeholder> </text:p>
|
||||
<text:p text:style-name="P27"/>
|
||||
<text:p text:style-name="P14">At <text:placeholder text:placeholder-type="text"><format_currency(invoice.lines[0].unit_price, invoice.party.lang, invoice.currency, digits=invoice.lines[0].__class__.unit_price.digits[1]) if invoice.lines else \'\'></text:placeholder><text:s/>PER LB</text:p>
|
||||
<text:p text:style-name="P14"/>
|
||||
<text:p text:style-name="P14">FREIGHT VALUE: <text:placeholder text:placeholder-type="text"><invoice.currency.symbol if invoice.currency else 'USD'></text:placeholder><text:s/><text:placeholder text:placeholder-type="text"><format_number(invoice.freight_amount, invoice.party.lang) if hasattr(invoice, \'freight_amount\') else \'\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P14"/>
|
||||
<text:p text:style-name="P14"><text:soft-page-break/>WE CERTIFY THAT THE MERCHANDISE IS OF BRAZIL ORIGIN</text:p>
|
||||
<text:p text:style-name="P29">L/C NUMBER <text:placeholder text:placeholder-type="text"><invoice.reference or ''></text:placeholder></text:p>
|
||||
<text:p text:style-name="P29">IMPORTER H.S. CODE NOS. <text:placeholder text:placeholder-type="text"><invoice.party_tax_identifier.type_string if invoice.party_tax_identifier else \'5201.0090\'></text:placeholder><text:s/></text:p>
|
||||
<text:p text:style-name="P29">IMPORTER’S NTN <text:placeholder text:placeholder-type="text"><invoice.party_tax_identifier.code if invoice.party_tax_identifier else \'\'></text:placeholder><text:s/></text:p>
|
||||
<text:p text:style-name="P29"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau8.A1" office:value-type="string">
|
||||
<text:p text:style-name="P30"><text:placeholder text:placeholder-type="text"><invoice.currency.symbol if invoice.currency else 'USD'></text:placeholder> <text:placeholder text:placeholder-type="text"><format_currency(invoice.total_amount, invoice.party.lang, invoice.currency)></text:placeholder></text:p>
|
||||
<text:p text:style-name="P19"/>
|
||||
<text:p text:style-name="P29"/>
|
||||
<text:p text:style-name="P32"><text:placeholder text:placeholder-type="text"><invoice.currency.symbol if invoice.currency else 'USD'></text:placeholder><text:s/><text:placeholder text:placeholder-type="text"><format_currency(invoice.total_amount, invoice.party.lang, invoice.currency)></text:placeholder></text:p>
|
||||
<text:p text:style-name="P21"/>
|
||||
<text:p text:style-name="P31"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P9"/>
|
||||
<text:p text:style-name="P11"/>
|
||||
<table:table table:name="Tableau9" table:style-name="Tableau9">
|
||||
<table:table-column table:style-name="Tableau9.A"/>
|
||||
<table:table-row table:style-name="Tableau9.1">
|
||||
<table:table-cell table:style-name="Tableau9.A1" office:value-type="string">
|
||||
<text:p text:style-name="P17">NET LANDED WEIGHTS, ACTUAL TARE, NO FRANCHISE</text:p>
|
||||
<text:p text:style-name="P17"/>
|
||||
<text:p text:style-name="P19">NET LANDED WEIGHTS, ACTUAL TARE, NO FRANCHISE</text:p>
|
||||
<text:p text:style-name="P19"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau9.1">
|
||||
<table:table-cell table:style-name="Tableau9.A1" office:value-type="string">
|
||||
<text:p text:style-name="P17"><text:placeholder text:placeholder-type="text"><for each='tax in invoice.taxes'></text:placeholder></text:p><text:p text:style-name="P17">V.A.T. <text:placeholder text:placeholder-type="text"><tax.description or \'\'></text:placeholder> RATE</text:p><text:p text:style-name="P17"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p>
|
||||
<text:p text:style-name="P19"><text:placeholder text:placeholder-type="text"><for each='tax in invoice.taxes'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P19">V.A.T. <text:placeholder text:placeholder-type="text"><tax.description or \'\'></text:placeholder><text:s/>RATE</text:p>
|
||||
<text:p text:style-name="P19"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P36"/>
|
||||
<text:p text:style-name="P38"/>
|
||||
<table:table table:name="Tableau10" table:style-name="Tableau10">
|
||||
<table:table-column table:style-name="Tableau10.A"/>
|
||||
<table:table-column table:style-name="Tableau10.B"/>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11">S/I</text:p>
|
||||
<text:p text:style-name="P11"/>
|
||||
<text:p text:style-name="P11">Controller Name</text:p>
|
||||
<text:p text:style-name="P13">S/I</text:p>
|
||||
<text:p text:style-name="P13"/>
|
||||
<text:p text:style-name="P13">Controller Name</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P21">S/BR/55</text:p>
|
||||
<text:p text:style-name="P21"/>
|
||||
<text:p text:style-name="P21">INTERTEK </text:p>
|
||||
<text:p text:style-name="P23">S/BR/55</text:p>
|
||||
<text:p text:style-name="P23"/>
|
||||
<text:p text:style-name="P23">INTERTEK </text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P21"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P23"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11">Payment</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><if test=\'invoice.payment_term and invoice.payment_term.description\'></text:placeholder></text:p><text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><for each=\'description in (invoice.payment_term.description or \'\').split(chr(10))\'></text:placeholder></text:p><text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"><description></text:placeholder></text:p><text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p><text:p text:style-name="P11"><text:placeholder text:placeholder-type="text"></if></text:placeholder></text:p>
|
||||
<text:p text:style-name="P11"><text:s text:c="109"/></text:p>
|
||||
<text:p text:style-name="P38"><text:soft-page-break/><text:span text:style-name="T4"><text:s text:c="107"/></text:span></text:p>
|
||||
<text:p text:style-name="P38"><text:span text:style-name="T4"><text:s text:c="110"/></text:span>ICT TRADING S.A.</text:p>
|
||||
<text:p text:style-name="P25"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11">SB/DR</text:p>
|
||||
<text:p text:style-name="P13">Payment</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"/>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><if test=\'invoice.payment_term and invoice.payment_term.description\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><for each=\'description in (invoice.payment_term.description or \'\').split(chr(10))\'></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"><description></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"></for></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:placeholder text:placeholder-type="text"></if></text:placeholder></text:p>
|
||||
<text:p text:style-name="P13"><text:s text:c="109"/></text:p>
|
||||
<text:p text:style-name="P40"><text:span text:style-name="T4"><text:s text:c="107"/></text:span></text:p>
|
||||
<text:p text:style-name="P40"><text:span text:style-name="T4"><text:s text:c="110"/></text:span>ICT TRADING S.A.</text:p>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"/>
|
||||
<text:p text:style-name="P13">SB/DR</text:p>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P11"/>
|
||||
<text:p text:style-name="P13"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
<table:table-row table:style-name="Tableau10.1">
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P13"/>
|
||||
</table:table-cell>
|
||||
<table:table-cell table:style-name="Tableau10.A1" office:value-type="string">
|
||||
<text:p text:style-name="P13"/>
|
||||
</table:table-cell>
|
||||
</table:table-row>
|
||||
</table:table>
|
||||
<text:p text:style-name="P34"/>
|
||||
<text:p text:style-name="P36"/>
|
||||
</office:text>
|
||||
</office:body>
|
||||
</office:document>
|
||||
105
modules/purchase/AGENTS.md
Normal file
105
modules/purchase/AGENTS.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# AGENTS.md - Module `purchase`
|
||||
|
||||
Ce guide complete le `AGENTS.md` racine.
|
||||
Pour ce module, les regles locales ci-dessous priment.
|
||||
|
||||
## 1) Perimetre metier
|
||||
|
||||
Le module `purchase` gere le cycle d'achat fournisseur:
|
||||
|
||||
- commande d'achat (`purchase.purchase`, `purchase.line`)
|
||||
- facturation fournisseur (`account.invoice` liee a l'achat)
|
||||
- reception/retour de stock (`stock.move`, `stock.shipment.in`, `stock.shipment.in.return`)
|
||||
- reporting achats (axes temporels, fournisseur, produit)
|
||||
|
||||
## 2) Fichiers pivots
|
||||
|
||||
- Logique coeur:
|
||||
- `modules/purchase/purchase.py`
|
||||
- Extensions metier connexes:
|
||||
- `modules/purchase/product.py`
|
||||
- `modules/purchase/stock.py`
|
||||
- `modules/purchase/invoice.py`
|
||||
- `modules/purchase/party.py`
|
||||
- `modules/purchase/configuration.py`
|
||||
- `modules/purchase/purchase_reporting.py`
|
||||
- Vues et actions:
|
||||
- `modules/purchase/purchase.xml`
|
||||
- `modules/purchase/stock.xml`
|
||||
- `modules/purchase/invoice.xml`
|
||||
- `modules/purchase/purchase_reporting.xml`
|
||||
- Manifest et dependances:
|
||||
- `modules/purchase/tryton.cfg`
|
||||
- Documentation metier:
|
||||
- `modules/purchase/docs/business-rules.template.md` (template)
|
||||
- `modules/purchase/docs/business-rules.md` (instance a remplir)
|
||||
|
||||
## 3) Etats et flux critiques a preserver
|
||||
|
||||
Workflow de commande (dans `purchase.py`):
|
||||
|
||||
- `draft -> quotation -> confirmed -> processing -> done`
|
||||
- transitions de retour existent aussi (`cancelled`, retour a `draft`, etc.)
|
||||
|
||||
Invariants importants:
|
||||
|
||||
- `invoice_state` et `shipment_state` doivent rester coherents apres `process()`.
|
||||
- `process()` orchestre facture + stock + recalcul d'etats, ne pas contourner sans raison.
|
||||
- `delete()` exige une commande annulee.
|
||||
- Les methodes `create_invoice()` et `create_move()` sont sensibles (gestion `lots` et `action`).
|
||||
|
||||
## 4) Couplages a surveiller
|
||||
|
||||
- Facture:
|
||||
- `purchase.py` <-> `invoice.py`
|
||||
- gestion des exceptions facture (`purchase_exception_state`)
|
||||
- Stock:
|
||||
- `purchase.py` <-> `stock.py`
|
||||
- liens `moves`, expeditions entrantes, retours
|
||||
- Produit/fournisseur/prix:
|
||||
- `product.py` impacte prix d'achat, UoM, fournisseurs
|
||||
- Tiers:
|
||||
- `party.py` impacte adresses/parametres fournisseur et contraintes d'effacement
|
||||
|
||||
## 5) Convention de modification pour ce module
|
||||
|
||||
1. Modifier d'abord le coeur minimal dans `purchase.py` ou le fichier specialise adequat.
|
||||
2. Mettre a jour XML uniquement si comportement UI/action change.
|
||||
3. Si regle metier impactee, mettre a jour `docs/business-rules.md`.
|
||||
4. Ajouter un test proche du flux reel (scenario `.rst` prioritaire si possible).
|
||||
5. Verifier les impacts transverses facture/stock avant rendu.
|
||||
|
||||
## 6) Strategie de test recommandee
|
||||
|
||||
Priorite 1 (rapide):
|
||||
|
||||
- `modules/purchase/tests/test_module.py`
|
||||
|
||||
Priorite 2 (comportement metier):
|
||||
|
||||
- `modules/purchase/tests/test_scenario.py`
|
||||
- Scenarios cibles selon la modif:
|
||||
- `scenario_purchase.rst`
|
||||
- `scenario_purchase_manual_invoice.rst`
|
||||
- `scenario_purchase_line_cancelled.rst`
|
||||
- `scenario_purchase_line_cancelled_on_shipment.rst`
|
||||
- `scenario_purchase_return_wizard.rst`
|
||||
- `scenario_purchase_reporting.rst`
|
||||
|
||||
Si la modif touche prix/UoM/fournisseur:
|
||||
|
||||
- ajouter un cas dans `test_module.py` ou un scenario dedie.
|
||||
|
||||
## 7) Cas qui exigent validation humaine
|
||||
|
||||
- Changement du workflow d'etats
|
||||
- Changement des regles de creation facture/mouvement
|
||||
- Changement de logique sur retours fournisseur
|
||||
- Changement qui altere les ecritures comptables ou le statut de paiement
|
||||
|
||||
## 8) Definition of done (module `purchase`)
|
||||
|
||||
- Le flux metier cible fonctionne de bout en bout.
|
||||
- Les etats `state`, `invoice_state`, `shipment_state` restent coherents.
|
||||
- Les tests du module pertinents passent.
|
||||
- Le patch est limite aux fichiers necessaires.
|
||||
122
modules/purchase/docs/business-rules.template.md
Normal file
122
modules/purchase/docs/business-rules.template.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Business Rules Template - Purchase
|
||||
|
||||
Statut: `draft` | `reviewed` | `approved`
|
||||
Version: `v0.1`
|
||||
Derniere mise a jour: `YYYY-MM-DD`
|
||||
Owner metier: `Nom / Equipe`
|
||||
Owner technique: `Nom / Equipe`
|
||||
|
||||
## 1) Scope
|
||||
|
||||
- Domaine: `ex: achats fournisseur`
|
||||
- Hors scope: `ex: achats intercompany`
|
||||
- Modules impactes:
|
||||
- `purchase`
|
||||
- `stock` (si applicable)
|
||||
- `account_invoice` (si applicable)
|
||||
|
||||
## 2) Glossaire
|
||||
|
||||
- `Purchase`: commande d'achat fournisseur.
|
||||
- `Line`: ligne de commande.
|
||||
- `Invoice State`: etat facture calcule.
|
||||
- `Shipment State`: etat reception calcule.
|
||||
- Ajouter ici les termes metier propres a ton contexte.
|
||||
|
||||
## 3) Regles metier (source de verite)
|
||||
|
||||
### BR-001 - [Titre court]
|
||||
|
||||
- Intent: `Pourquoi cette regle existe`
|
||||
- Description:
|
||||
- `Enonce clair et testable`
|
||||
- Conditions d'entree:
|
||||
- `Etat`
|
||||
- `Type de ligne (goods/service)`
|
||||
- `Contexte (societe, devise, fournisseur, lot, etc.)`
|
||||
- Resultat attendu:
|
||||
- `Etat/valeur/action attendue`
|
||||
- Exceptions:
|
||||
- `Cas ou la regle ne s'applique pas`
|
||||
- Priorite:
|
||||
- `bloquante | importante | informative`
|
||||
- Source:
|
||||
- `Ticket / spec / decision metier`
|
||||
|
||||
### BR-002 - [Titre court]
|
||||
|
||||
- Intent:
|
||||
- Description:
|
||||
- Conditions d'entree:
|
||||
- Resultat attendu:
|
||||
- Exceptions:
|
||||
- Priorite:
|
||||
- Source:
|
||||
|
||||
## 4) Matrice d'etats (optionnel mais recommande)
|
||||
|
||||
| Regle | Etat initial | Evenement | Etat attendu | Notes |
|
||||
|---|---|---|---|---|
|
||||
| BR-001 | `draft` | `quote` | `quotation` | |
|
||||
| BR-002 | `quotation` | `confirm` | `confirmed/processing` | |
|
||||
|
||||
## 5) Exemples concrets
|
||||
|
||||
### Exemple E1 - Cas nominal
|
||||
|
||||
- Donnees:
|
||||
- `fournisseur = X`
|
||||
- `produit = Y`
|
||||
- `quantite = 10`
|
||||
- Attendu:
|
||||
- `invoice_state = pending`
|
||||
- `shipment_state = waiting`
|
||||
|
||||
### Exemple E2 - Cas limite
|
||||
|
||||
- Donnees:
|
||||
- Attendu:
|
||||
|
||||
## 6) Impact code attendu
|
||||
|
||||
- Fichiers Python potentiellement concernes:
|
||||
- `modules/purchase/purchase.py`
|
||||
- `modules/purchase/stock.py`
|
||||
- `modules/purchase/invoice.py`
|
||||
- `modules/purchase/product.py`
|
||||
- Fichiers XML potentiellement concernes:
|
||||
- `modules/purchase/purchase.xml`
|
||||
- `modules/purchase/stock.xml`
|
||||
- `modules/purchase/invoice.xml`
|
||||
|
||||
## 7) Strategie de tests
|
||||
|
||||
- Unitaires:
|
||||
- `modules/purchase/tests/test_module.py`
|
||||
- Scenarios:
|
||||
- `modules/purchase/tests/scenario_purchase.rst`
|
||||
- `modules/purchase/tests/scenario_purchase_manual_invoice.rst`
|
||||
- `modules/purchase/tests/scenario_purchase_return_wizard.rst`
|
||||
|
||||
Pour chaque regle BR-xxx, lister le test associe:
|
||||
|
||||
| Regle | Test existant | Nouveau test a ajouter | Statut |
|
||||
|---|---|---|---|
|
||||
| BR-001 | `...` | `...` | `todo` |
|
||||
|
||||
## 8) Compatibilite et migration
|
||||
|
||||
- Effet retroactif sur commandes existantes: `oui/non`
|
||||
- Migration necessaire: `oui/non`
|
||||
- Plan de rollback:
|
||||
- `comment revenir en arriere sans corruption metier`
|
||||
|
||||
## 9) Validation
|
||||
|
||||
- Valide par metier:
|
||||
- `Nom` - `date`
|
||||
- Valide par technique:
|
||||
- `Nom` - `date`
|
||||
- Decision finale:
|
||||
- `approved / rejected / needs update`
|
||||
|
||||
@@ -983,7 +983,7 @@ class QualityAnalysis(ModelSQL,ModelView):
|
||||
class Line(metaclass=PoolMeta):
|
||||
__name__ = 'purchase.line'
|
||||
|
||||
quantity_theorical = fields.Numeric("Th. quantity", digits='unit', readonly=True)
|
||||
quantity_theorical = fields.Numeric("Th. quantity", digits='unit', readonly=False)
|
||||
price_type = fields.Selection([
|
||||
('cash', 'Cash Price'),
|
||||
('priced', 'Priced'),
|
||||
@@ -1210,6 +1210,26 @@ class Line(metaclass=PoolMeta):
|
||||
return round(d.price_index.get_price(Date.today(),self.unit,self.purchase.currency,True),4)
|
||||
return self.unit_price
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
old_values = {}
|
||||
|
||||
for records, values in zip(args[::2], args[1::2]):
|
||||
if 'quantity_theorical' in values:
|
||||
for record in records:
|
||||
old_values[record.id] = record.quantity_theorical
|
||||
|
||||
super().write(*args)
|
||||
|
||||
lines = sum(args[::2], [])
|
||||
for line in lines:
|
||||
if line.id in old_values:
|
||||
old = old_values[line.id]
|
||||
new = line.quantity_theorical
|
||||
delta = Decimal(new) - Decimal(old)
|
||||
if delta > 0:
|
||||
continue
|
||||
|
||||
@classmethod
|
||||
def copy(cls, lines, default=None):
|
||||
if default is None:
|
||||
@@ -1292,16 +1312,7 @@ class Line(metaclass=PoolMeta):
|
||||
fl.lot = lot.id
|
||||
fl.line = line.id
|
||||
FeeLots.save([fl])
|
||||
|
||||
#update inherit fee qt
|
||||
# if line.fees:
|
||||
# Fee = Pool().get('fee.fee')
|
||||
# for f in line.fees:
|
||||
# if f.inherit_qt:
|
||||
# f.quantity = round(line.quantity_theorical,4)
|
||||
# f.unit = line.unit
|
||||
# Fee.save([f])
|
||||
#check if fee purchase is filled on fee
|
||||
|
||||
if line.fee_:
|
||||
if not line.fee_.purchase:
|
||||
Fee = Pool().get('fee.fee')
|
||||
|
||||
Reference in New Issue
Block a user