Search 1.9 billion lines of Odoo code on GitHub

payment_postfinance

Author: DataDialog - Michael Karrer (michael.karrer@datadialog.net)
License: no license
Branch: hrbericht
Repository: OpenAT/online
Dependencies: base, fso_base, fso_base_website, and payment
Languages: JavaScript (14, 3.4%), Markdown (84, 20.3%), Python (237, 57.2%), and XML (79, 19.1%)
Other branches: dependabot/npm_and_yarn/addons-loaded/website_tools/static/lib/iframe-resizer/jquery-3.5.0, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/cached-path-relative-1.0.2, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/cached-path-relative-1.1.0, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/decode-uri-component-0.2.2, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/elliptic-6.5.3, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/elliptic-6.5.4, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/hosted-git-info-2.8.9, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/ini-1.3.8, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/lodash-4.17.19, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/lodash-4.17.21, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/node-sass-4.13.1, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/node-sass-7.0.0, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/path-parse-1.0.7, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/qs-6.5.3, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/shell-quote-1.7.3, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/tar-2.2.2, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/ua-parser-js-0.7.24, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/ua-parser-js-0.7.33, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/undefsafe-2.0.5, dependabot/npm_and_yarn/addons-own/fso_base_website/static/lib/outdated-browser-rework-master/y18n-3.2.2, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/aws-sdk-2.1030.0, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/bl-1.2.3, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/cached-path-relative-1.1.0, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/css-what-2.1.3, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/elliptic-6.5.4, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/handlebars-4.7.7, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/hosted-git-info-2.8.9, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/i-0.3.7, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/lodash.merge-4.6.2, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/node-sass-4.14.1, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/shell-quote-1.7.3, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/tar-2.2.2, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/xmldom-0.5.0, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/y18n-3.2.2, dependabot/npm_and_yarn/addons-own/fso_website_email/static/src/lib/textversionjs-master/yargs-parser-13.1.2, dependabot/npm_and_yarn/addons-own/website_widget_manager/static/lib/iframe-resizer/jquery-3.5.0, dependabot/pip/TOOLS/babel-2.9.1, dependabot/pip/TOOLS/jinja2-2.11.3, dependabot/pip/TOOLS/lxml-4.6.3, dependabot/pip/TOOLS/lxml-4.6.5, dependabot/pip/TOOLS/lxml-4.9.1, dependabot/pip/TOOLS/mako-1.2.2, dependabot/pip/TOOLS/pillow-6.2.0, dependabot/pip/TOOLS/pillow-8.3.2, dependabot/pip/TOOLS/pillow-9.0.1, dependabot/pip/TOOLS/pillow-9.3.0, dependabot/pip/TOOLS/psutil-5.6.6, dependabot/pip/TOOLS/pyopenssl-17.5.0, dependabot/pip/TOOLS/python-ldap-3.4.0, dependabot/pip/TOOLS/pyyaml-5.1, dependabot/pip/TOOLS/pyyaml-5.4, dependabot/pip/TOOLS/reportlab-3.5.55, dependabot/pip/TOOLS/requests-2.20.0, dependabot/pip/TOOLS/werkzeug-0.15.3, dependabot/pip/TOOLS/werkzeug-2.2.3, dependabot/pip/addons-own/fso_rest_api/sphinx_doc/babel-2.9.1, dependabot/pip/addons-own/fso_rest_api/sphinx_doc/certifi-2022.12.7, dependabot/pip/addons-own/fso_rest_api/sphinx_doc/jinja2-2.11.3, dependabot/pip/addons-own/fso_rest_api/sphinx_doc/urllib3-1.26.5, dependabot/pip/babel-2.9.1, dependabot/pip/certifi-2022.12.7, dependabot/pip/jinja2-2.11.3, dependabot/pip/lxml-4.6.3, dependabot/pip/lxml-4.6.5, dependabot/pip/lxml-4.9.1, dependabot/pip/mako-1.2.2, dependabot/pip/pillow-8.3.2, dependabot/pip/pillow-9.0.1, dependabot/pip/pillow-9.3.0, dependabot/pip/psutil-5.6.6, dependabot/pip/pyyaml-5.1, dependabot/pip/pyyaml-5.4, dependabot/pip/reportlab-3.5.55, dependabot/pip/urllib3-1.24.2, dependabot/pip/urllib3-1.26.5, dependabot/pip/werkzeug-0.15.3, dependabot/pip/werkzeug-2.2.3, fso-api-payments, fso_website_email-anchor, fso_website_email-delete_modal, fso_website_email-print_field_button, getresponse, google_tag_manager, o12, o8, o8r436-patch, product-gui-update, rest_api, website_forum_imagedialog, website_image_edit-resize, website_map, website_sale_donate_ppt_inline, and worflow_per_subscription

<h1>Payment Provider FRST</h1> <p>Dier Payment Provider ist speziel für das FRST gedacht. Er ermöglicht es Spenden (Einmal- oder Dauerspenden) per Bankeinzug (IBAN u. BIC) zu tätigen. Es wurde eine java Script Form Validation eingebaut um die IBAN und BIC Nummer zu überprüfen.</p> <h1>Doku: Ablauf des Checkout Prozesses in odoo</h1> <p>Die Basis für den Bezahlvorgang auf der Webseite ist das addon website<em>sale dieser wiederum integrierte alle payment</em>* addon payment provider über das Brückenmodul website_payment welches wiederum das addon payment einbindet.</p> <h2>Addons:</h2> <ul> <li>sale = zuständig für sales.order</li> <li>payment = basis modul (framework) für alle payment provider</li> <li>payment_* = payment providers (paypla, adyen, ogone)</li> <li>website_payment = bridge addon zum einbinden der payment provider in die webseite</li> <li>website_sale = odoo shop system</li> </ul> <h2>Ablauf eines Checkoutvorganges (nicht eingeloggt):</h2> <p>Im Folgenden werden wir einen Shop Checkout Vorgang durchgehen. Wobei es hier nicht um Vollständigkeit geht sondern lediglich darum den Forgang im Kern zu verstehen:</p> <h3>1.) Produkt auf der Produktseite in den Warenkorb legen</h3> <p><code>python @http.route([&#39;/shop/product/&lt;model(&quot;product.template&quot;):product&gt;&#39;], type=&#39;http&#39;, auth=&quot;public&quot;, website=True) def product(self, product, category=&#39;&#39;, search=&#39;&#39;, **kwargs): ... return request.website.render(&quot;website_sale.product&quot;, values) </code></p> <p>Das Produkt wird auf seiner Produktseite angezeigt. Suche und Kategorie werden dabei in den GET Variablen berücksichtigt. Die Preisliste wird über <code>get_pricelist()</code> bestimmt und mitgegeben. das Feld product.price ist dabei bereits selbst ein functional field das die derzeitige preisliste berücksichtigt user<em>id ist dabei in jeder web session verfügbar: user</em>id wird benötigt um festzustellen welche preisliste und währung der aktuelle user hat. Ist kein user eingeloggt so gibt es dennoch einen default user der automatisch der website session (bzw. dem request) zugeordent wird.</p> <p>TIP: Alle Qweb Templates für den Shop finden sich unter addons/website_sale/views/templates.xml.</p> <h4>Preis eines Produktes</h4> <p>Der Finale Preis eines Produktes wird über die user_id die Preisliste und die Währung der Webpage bestimmt. Er kann über product.price ausgelesen werden. Dies funktioniert da dies ein functional Feld ist (siehe Erklärung weiter oben).</p> <p>Im qweb template für Produkte website<em>sale.product wird das template product</em>price aufgerufen. Hier wird angezeigt</p> <ul> <li>Der aktuelle Listenpreis angezeigt über t-field=&quot;product.lst_price&quot; Wenn dieser aufgrund der preisliste größer ist als der product.price (visible discounts)</li> <li>Der aktuelle Preis angezeigt über t-field=&quot;product.price&quot;</li> </ul> <p>TIP: Es wird anderer HTML Code angezeigt je nachdem ob man im Editor Modus ist oder nicht. Dies geschieht über die CSS Klasse css<em>editable</em>mode<em>hidden bzw. css</em>editable<em>mode</em>display</p> <h4>Add to Cart</h4> <p>Um das Produkt nun dem Warenkorb zuzuführen gibt es einen Button add<em>to</em>cart. Dieser submittet die überliegende Form an /shop/cart/update. Die einzige relevante post data information dieser form ist die produktmenge alles andere wird über die user<em>id, product id usw. berechnet. ``` html &lt;form t-att-action=&quot;keep(&#39;/shop/cart/update&#39;)&quot; class=&quot;js</em>add<em>cart</em>variants&quot; method=&quot;POST&quot;&gt; ... <a id="add_to_cart" class="btn btn-primary btn-lg mt8 js_check_product a-submit" href="#">Add to Cart</a> ```</p> <p>In dem Webcontroller /shop/cart/update (addons/website<em>sale/controllers/main.py) wird nun das erste mal die zentrale Funktion sale</em>get<em>order aufgerufen und eine sales.order erstellt und diese mittels der Funktion _cart</em>update direkt aktualisiert. <code> request.website.sale_get_order(force_create=1)._cart_update(product_id=int(product_id), add_qty=float(add_qty), set_qty=float(set_qty)) </code></p> <p>Die Funktion <em>cart</em>update die in der methode sale<em>get</em>order aufgerufen wird überprüft ob es bereits sales.order.lines für diese Produkt id gibt und aktualisiert diese sofern die Menge nicht unter 0 gesinken ist. Die values für die Aktualisierung der sales.order.line werden dabei über <code> values = self._website_product_id_change(cr, uid, ids, so.id, product_id, qty=quantity, line_id=line_id, context=context) </code> geholt. und mit <code>values[&#39;product_uom_qty&#39;] = quantity</code>` vor dem write aktualisiert. </p> <p>TIP vor TIP :): Wahrscheinlich ist es leichter die beiden controller <code> @http.route([&#39;/shop/cart/update&#39;], type=&#39;http&#39;, auth=&quot;public&quot;, methods=[&#39;POST&#39;], website=True) def cart_update(self, product_id, add_qty=1, set_qty=0, **kw): </code> und <code> @http.route([&#39;/shop/cart/update_json&#39;], type=&#39;json&#39;, auth=&quot;public&quot;, methods=[&#39;POST&#39;], website=True) def cart_update_json(self, product_id, line_id, add_qty=None, set_qty=None, display=True): </code> zu übernhemen und dort jeweils .<em>cart</em>update mit den kw<em>args aufzurufen - dazu kommt das wir _cart</em>update so verändern müssen das A) wert aus kwargs für price<em>units sale.order.line übernommen wird B) WEIN KEIN WERT IN KWARGS dann bestehernder wert für price</em>unit in sale.order.line WENN unterschied zu price_unit C) </p> <p>TIP: um nun später unsere Funktion zu realisieren, den preis frei wählen zu können, erweitern wir in der Funktion <em>cart</em>update die values um values[&#39;price<em>unit&#39;] = kwargs[&#39;price</em>donate&#39;] um in die sales.order.line den preis aus den kwargs der post form data (/shop/cart/update) des website kontrollers shop/product/<model("product.template"):product> in die sales.order.line zu schreiben</p> <ul> <li>depend on website_sale</li> <li>inherit sale-order</li> <li>extend <em>cart</em>update to include a new value of the **kwargs price<em>donate as price</em>unit submited py the add to cart form</li> <li></li> </ul>