Initial import from Docker volume
This commit is contained in:
18
modules/sale_subscription_asset/__init__.py
Executable file
18
modules/sale_subscription_asset/__init__.py
Executable file
@@ -0,0 +1,18 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.pool import Pool
|
||||
|
||||
from . import sale, stock
|
||||
|
||||
__all__ = ['register']
|
||||
|
||||
|
||||
def register():
|
||||
Pool.register(
|
||||
sale.SubscriptionServiceStockLot,
|
||||
sale.SubscriptionService,
|
||||
sale.Subscription,
|
||||
sale.SubscriptionLine,
|
||||
stock.Lot,
|
||||
module='sale_subscription_asset', type_='model')
|
||||
BIN
modules/sale_subscription_asset/__pycache__/__init__.cpython-311.opt-1.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/__init__.cpython-311.opt-1.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/__pycache__/__init__.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/__init__.cpython-311.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/__pycache__/sale.cpython-311.opt-1.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/sale.cpython-311.opt-1.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/__pycache__/sale.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/sale.cpython-311.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/__pycache__/stock.cpython-311.opt-1.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/stock.cpython-311.opt-1.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/__pycache__/stock.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/__pycache__/stock.cpython-311.pyc
Executable file
Binary file not shown.
49
modules/sale_subscription_asset/locale/bg.po
Executable file
49
modules/sale_subscription_asset/locale/bg.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/ca.po
Executable file
51
modules/sale_subscription_asset/locale/ca.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Lot de l'actiu"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Lot de l'actiu obligatori"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Lots de l'actiu"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Lots de l'actiu disponibles"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Lot"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Servei"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "Subscripció"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Línies de subscripció"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Serveis"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"Les línies \"%(line1)s\" i \"%(line2)s\" es sobreposen, heu d'utilitzar "
|
||||
"dates diferents."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Servei de subscripció - Lot del actiu"
|
||||
49
modules/sale_subscription_asset/locale/cs.po
Executable file
49
modules/sale_subscription_asset/locale/cs.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/de.po
Executable file
51
modules/sale_subscription_asset/locale/de.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Charge Abonnement Objekt"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Anlage Charge erforderlich"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Anlage Charge"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Verfügbare Abonnement Objekte"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Charge"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Dienstleistung"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "Abonniert"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Abonnementpositionen"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Dienstleistungen"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"Die Positionen \"%(line1)s\" und \"%(line2)s\" überschneiden sich. Es müssen"
|
||||
" unterschiedliche Daten verwendet werden."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Abonnement Dienstleistung - Charge Abonnement Objekt"
|
||||
51
modules/sale_subscription_asset/locale/es.po
Executable file
51
modules/sale_subscription_asset/locale/es.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Lote del activo"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Lote del activo obligatorio"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Lotes del activo"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Lotes del activo disponibles"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Lote"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Servicio"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "Suscripción"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Lineas de suscripción"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Servicios"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"Las líneas \"%(line1)s\" y \"%(line2)s\" se solapan, debe usar fechas "
|
||||
"diferentes."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Servicio de suscripción - Lote del activo"
|
||||
49
modules/sale_subscription_asset/locale/es_419.po
Executable file
49
modules/sale_subscription_asset/locale/es_419.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/et.po
Executable file
49
modules/sale_subscription_asset/locale/et.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/fa.po
Executable file
51
modules/sale_subscription_asset/locale/fa.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "قطعه دارایی"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "قطعه دارایی مورد نیاز"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "قطعات دارایی"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "قطعات دارایی دردسترس"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "قطعه"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "خدمات"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "مشترک شده است"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "سطرهای اشتراک"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "خدمات"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"سطرهای \"%(line1)s\" و \"%(line2)s\" همپوشانی دارند، شما باید از تاریخ های "
|
||||
"متفاوت استفاده کنید."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "قطعه موجودی دارایی - خدمات اشتراک"
|
||||
49
modules/sale_subscription_asset/locale/fi.po
Executable file
49
modules/sale_subscription_asset/locale/fi.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/fr.po
Executable file
51
modules/sale_subscription_asset/locale/fr.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Lot d'actif"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Lot d'actif requis"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Lots d'actif"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Lot d'actif disponible"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Lot"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Service"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "Abonné"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Lignes d'abonnement"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Services"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"Les lignes « %(line1)s » et « %(line2)s » se chevauchent, vous devez "
|
||||
"utiliser des dates différentes."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Service d'abonnement - Lot d'actif"
|
||||
49
modules/sale_subscription_asset/locale/hu.po
Executable file
49
modules/sale_subscription_asset/locale/hu.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/id.po
Executable file
49
modules/sale_subscription_asset/locale/id.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Jasa"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/it.po
Executable file
51
modules/sale_subscription_asset/locale/it.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Lotto cespiti"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Lotto cespiti richiesto"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Lotti di cespito"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Lotti di cespiti disponibili"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Lotto"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Servizio"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "Abbonato"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Righe di abbonamento"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Servizi"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"Le linee \"%(line1)s\" e \"%(line2)s\" si sovrappongono, è necessario "
|
||||
"utilizzare date diverse."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Servizio in abbonamento - Stock lotto cespiti"
|
||||
49
modules/sale_subscription_asset/locale/lo.po
Executable file
49
modules/sale_subscription_asset/locale/lo.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/lt.po
Executable file
49
modules/sale_subscription_asset/locale/lt.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
51
modules/sale_subscription_asset/locale/nl.po
Executable file
51
modules/sale_subscription_asset/locale/nl.po
Executable file
@@ -0,0 +1,51 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr "Activa lot"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr "Activa lot vereist"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr "Activa loten"
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr "Beschikbare activa loten"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr "Lot"
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr "Dienst"
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr "geabonneerd"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr "Abonnementsregel"
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr "Diensten"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
"De regels \"%(line1)s\" en \"%(line2)s\" overlappen elkaar, u moet "
|
||||
"verschillende datums gebruiken."
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr "Abonnementsdienst - Voorraadpartijactiva"
|
||||
49
modules/sale_subscription_asset/locale/pl.po
Executable file
49
modules/sale_subscription_asset/locale/pl.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/pt.po
Executable file
49
modules/sale_subscription_asset/locale/pt.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/ro.po
Executable file
49
modules/sale_subscription_asset/locale/ro.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/ru.po
Executable file
49
modules/sale_subscription_asset/locale/ru.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/sl.po
Executable file
49
modules/sale_subscription_asset/locale/sl.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/tr.po
Executable file
49
modules/sale_subscription_asset/locale/tr.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/uk.po
Executable file
49
modules/sale_subscription_asset/locale/uk.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
49
modules/sale_subscription_asset/locale/zh_CN.po
Executable file
49
modules/sale_subscription_asset/locale/zh_CN.po
Executable file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot:"
|
||||
msgid "Asset Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.line,asset_lot_required:"
|
||||
msgid "Asset Lot Required"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots:"
|
||||
msgid "Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service,asset_lots_available:"
|
||||
msgid "Available Asset Lots"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,lot:"
|
||||
msgid "Lot"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.subscription.service-stock.lot.asset,service:"
|
||||
msgid "Service"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscribed:"
|
||||
msgid "Subscribed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_lines:"
|
||||
msgid "Subscription Lines"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.lot,subscription_services:"
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_asset_line_overlap"
|
||||
msgid ""
|
||||
"The lines \"%(line1)s\" and \"%(line2)s\" overlap, you must use different "
|
||||
"dates."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:sale.subscription.service-stock.lot.asset,name:"
|
||||
msgid "Subscription Service - Stock Lot Asset"
|
||||
msgstr ""
|
||||
10
modules/sale_subscription_asset/message.xml
Executable file
10
modules/sale_subscription_asset/message.xml
Executable file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_asset_line_overlap">
|
||||
<field name="text">The lines "%(line1)s" and "%(line2)s" overlap, you must use different dates.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
166
modules/sale_subscription_asset/sale.py
Executable file
166
modules/sale_subscription_asset/sale.py
Executable file
@@ -0,0 +1,166 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from sql import Null
|
||||
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import ModelSQL, ModelView, Workflow, fields
|
||||
from trytond.model.exceptions import ValidationError
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Bool, Eval, If
|
||||
from trytond.tools import grouped_slice, reduce_ids
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class SubscriptionService(metaclass=PoolMeta):
|
||||
__name__ = 'sale.subscription.service'
|
||||
|
||||
asset_lots = fields.Many2Many(
|
||||
'sale.subscription.service-stock.lot.asset',
|
||||
'service', 'lot', "Asset Lots",
|
||||
domain=[
|
||||
('product.type', '=', 'assets'),
|
||||
])
|
||||
asset_lots_available = fields.Many2Many(
|
||||
'sale.subscription.service-stock.lot.asset',
|
||||
'service', 'lot', "Available Asset Lots", readonly=True,
|
||||
domain=[
|
||||
('product.type', '=', 'assets'),
|
||||
],
|
||||
filter=[
|
||||
('subscribed', '=', None),
|
||||
])
|
||||
|
||||
|
||||
class SubscriptionServiceStockLot(ModelSQL):
|
||||
"Subscription Service - Stock Lot Asset"
|
||||
__name__ = 'sale.subscription.service-stock.lot.asset'
|
||||
|
||||
service = fields.Many2One(
|
||||
'sale.subscription.service', "Service",
|
||||
ondelete='CASCADE', required=True)
|
||||
lot = fields.Many2One(
|
||||
'stock.lot', "Lot", ondelete='CASCADE', required=True,
|
||||
domain=[
|
||||
('product.type', '=', 'assets'),
|
||||
])
|
||||
|
||||
|
||||
class Subscription(metaclass=PoolMeta):
|
||||
__name__ = 'sale.subscription'
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('cancelled')
|
||||
def cancel(cls, subscriptions):
|
||||
pool = Pool()
|
||||
SubscriptionLine = pool.get('sale.subscription.line')
|
||||
|
||||
sub_lines = [l for s in subscriptions for l in s.lines if l.asset_lot]
|
||||
SubscriptionLine.write(sub_lines, {'asset_lot': None})
|
||||
|
||||
super(Subscription, cls).cancel(subscriptions)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('running')
|
||||
def run(cls, subscriptions):
|
||||
pool = Pool()
|
||||
Line = pool.get('sale.subscription.line')
|
||||
super(Subscription, cls).run(subscriptions)
|
||||
lines = [l for s in subscriptions for l in s.lines]
|
||||
Line._validate(lines, ['asset_lot'])
|
||||
|
||||
|
||||
class SubscriptionLine(metaclass=PoolMeta):
|
||||
__name__ = 'sale.subscription.line'
|
||||
|
||||
asset_lot = fields.Many2One('stock.lot', "Asset Lot",
|
||||
domain=[
|
||||
('subscription_services', '=', Eval('service')),
|
||||
],
|
||||
states={
|
||||
'required': ((Eval('subscription_state') == 'running')
|
||||
& Eval('asset_lot_required')),
|
||||
'invisible': ~Eval('asset_lot_required'),
|
||||
'readonly': Eval('subscription_state') != 'draft',
|
||||
})
|
||||
asset_lot_required = fields.Function(
|
||||
fields.Boolean("Asset Lot Required"),
|
||||
'on_change_with_asset_lot_required')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(SubscriptionLine, cls).__setup__()
|
||||
|
||||
cls.quantity.domain = [
|
||||
cls.quantity.domain,
|
||||
If(Bool(Eval('asset_lot')),
|
||||
('quantity', '=', 1),
|
||||
()),
|
||||
]
|
||||
|
||||
@fields.depends('service')
|
||||
def on_change_with_asset_lot_required(self, name=None):
|
||||
if not self.service:
|
||||
return False
|
||||
return bool(self.service.asset_lots)
|
||||
|
||||
@classmethod
|
||||
def copy(cls, lines, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('lot')
|
||||
return super(SubscriptionLine, cls).copy(lines, default)
|
||||
|
||||
@classmethod
|
||||
def validate_fields(cls, lines, field_names):
|
||||
super().validate_fields(lines, field_names)
|
||||
cls._validate_dates(lines, field_names)
|
||||
|
||||
@classmethod
|
||||
def _validate_dates(cls, lines, field_names=None):
|
||||
if field_names and not (field_names & {
|
||||
'start_date', 'end_date', 'asset_lot'}):
|
||||
return
|
||||
transaction = Transaction()
|
||||
connection = transaction.connection
|
||||
cursor = connection.cursor()
|
||||
|
||||
cls.lock()
|
||||
|
||||
line = cls.__table__()
|
||||
other = cls.__table__()
|
||||
overlap_where = (
|
||||
((line.end_date == Null)
|
||||
& ((other.end_date == Null)
|
||||
| (other.start_date > line.start_date)
|
||||
| (other.end_date > line.start_date)))
|
||||
| ((line.end_date != Null)
|
||||
& ((
|
||||
(other.end_date == Null)
|
||||
& (other.start_date < line.end_date))
|
||||
| ((other.end_date != Null)
|
||||
& ((
|
||||
(other.end_date >= line.start_date)
|
||||
& (other.end_date < line.end_date))
|
||||
| ((other.start_date >= line.start_date)
|
||||
& (other.start_date < line.end_date)))))))
|
||||
for sub_lines in grouped_slice(lines):
|
||||
sub_ids = [l.id for l in sub_lines]
|
||||
cursor.execute(*line.join(other,
|
||||
condition=((line.id != other.id)
|
||||
& (line.asset_lot == other.asset_lot))
|
||||
).select(line.id, other.id,
|
||||
where=((line.asset_lot != Null)
|
||||
& reduce_ids(line.id, sub_ids)
|
||||
& overlap_where),
|
||||
limit=1))
|
||||
overlapping = cursor.fetchone()
|
||||
if overlapping:
|
||||
sline1, sline2 = cls.browse(overlapping)
|
||||
raise ValidationError(
|
||||
gettext('sale_subscription_asset.msg_asset_line_overlap',
|
||||
line1=sline1.rec_name,
|
||||
line2=sline2.rec_name))
|
||||
23
modules/sale_subscription_asset/sale.xml
Executable file
23
modules/sale_subscription_asset/sale.xml
Executable file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="subscription_service_view_form">
|
||||
<field name="model">sale.subscription.service</field>
|
||||
<field name="inherit" ref="sale_subscription.service_view_form"/>
|
||||
<field name="name">subscription_service_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="subscription_line_view_form">
|
||||
<field name="model">sale.subscription.line</field>
|
||||
<field name="inherit" ref="sale_subscription.subscription_line_view_form"/>
|
||||
<field name="name">subscription_line_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="subscription_line_view_list">
|
||||
<field name="model">sale.subscription.line</field>
|
||||
<field name="inherit" ref="sale_subscription.subscription_line_view_list"/>
|
||||
<field name="name">subscription_line_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
73
modules/sale_subscription_asset/stock.py
Executable file
73
modules/sale_subscription_asset/stock.py
Executable file
@@ -0,0 +1,73 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.tools import grouped_slice
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class Lot(metaclass=PoolMeta):
|
||||
__name__ = 'stock.lot'
|
||||
|
||||
subscription_services = fields.Many2Many(
|
||||
'sale.subscription.service-stock.lot.asset',
|
||||
'lot', 'service', "Services")
|
||||
subscription_lines = fields.One2Many(
|
||||
'sale.subscription.line', 'asset_lot', "Subscription Lines")
|
||||
subscribed = fields.Function(
|
||||
fields.Many2One('sale.subscription.line', "Subscribed"),
|
||||
'get_subscribed', searcher='search_subscribed')
|
||||
|
||||
@classmethod
|
||||
def get_subscribed(cls, lots, name):
|
||||
pool = Pool()
|
||||
Date = pool.get('ir.date')
|
||||
SubscriptionLine = pool.get('sale.subscription.line')
|
||||
|
||||
subscribed_lines = {l.id: None for l in lots}
|
||||
date = Transaction().context.get('date', Date.today())
|
||||
for sub_lots in grouped_slice(lots):
|
||||
lines = SubscriptionLine.search([
|
||||
('asset_lot', 'in', [l.id for l in sub_lots]),
|
||||
[
|
||||
('start_date', '<=', date),
|
||||
['OR',
|
||||
('end_date', '=', None),
|
||||
('end_date', '>', date),
|
||||
],
|
||||
]
|
||||
])
|
||||
subscribed_lines.update((s.asset_lot.id, s.id) for s in lines)
|
||||
return subscribed_lines
|
||||
|
||||
@classmethod
|
||||
def search_subscribed(cls, name, clause):
|
||||
pool = Pool()
|
||||
Date = pool.get('ir.date')
|
||||
|
||||
name, operator, value = clause[:3]
|
||||
date = Transaction().context.get('date', Date.today())
|
||||
domain = [
|
||||
('asset_lot', '!=', None),
|
||||
('start_date', '<=', date),
|
||||
['OR',
|
||||
('end_date', '=', None),
|
||||
('end_date', '>', date),
|
||||
],
|
||||
]
|
||||
if '.' in name:
|
||||
_, target_name = name.split('.', 1)
|
||||
domain.append((target_name,) + tuple(clause[1:]))
|
||||
return [('subscription_lines', 'where', domain)]
|
||||
else:
|
||||
if (operator, value) == ('=', None):
|
||||
return [('subscription_lines', 'not where', domain)]
|
||||
elif (operator, value) == ('!=', None):
|
||||
return [('subscription_lines', 'where', domain)]
|
||||
else:
|
||||
if isinstance(value, str):
|
||||
target_name = 'rec_name'
|
||||
else:
|
||||
target_name = 'id'
|
||||
domain.append((target_name,) + tuple(clause[1:]))
|
||||
return [('subscription_lines', 'where', domain)]
|
||||
12
modules/sale_subscription_asset/stock.xml
Executable file
12
modules/sale_subscription_asset/stock.xml
Executable file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="stock_lot_view_form">
|
||||
<field name="model">stock.lot</field>
|
||||
<field name="inherit" ref="stock_lot.lot_view_form"/>
|
||||
<field name="name">stock_lot_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
2
modules/sale_subscription_asset/tests/__init__.py
Executable file
2
modules/sale_subscription_asset/tests/__init__.py
Executable file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
BIN
modules/sale_subscription_asset/tests/__pycache__/__init__.cpython-311.opt-1.pyc
Executable file
BIN
modules/sale_subscription_asset/tests/__pycache__/__init__.cpython-311.opt-1.pyc
Executable file
Binary file not shown.
BIN
modules/sale_subscription_asset/tests/__pycache__/__init__.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/tests/__pycache__/__init__.cpython-311.pyc
Executable file
Binary file not shown.
Binary file not shown.
BIN
modules/sale_subscription_asset/tests/__pycache__/test_module.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/tests/__pycache__/test_module.cpython-311.pyc
Executable file
Binary file not shown.
Binary file not shown.
BIN
modules/sale_subscription_asset/tests/__pycache__/test_scenario.cpython-311.pyc
Executable file
BIN
modules/sale_subscription_asset/tests/__pycache__/test_scenario.cpython-311.pyc
Executable file
Binary file not shown.
163
modules/sale_subscription_asset/tests/scenario_sale_subscription_asset.rst
Executable file
163
modules/sale_subscription_asset/tests/scenario_sale_subscription_asset.rst
Executable file
@@ -0,0 +1,163 @@
|
||||
================================
|
||||
Sale Subscription Asset Scenario
|
||||
================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> import datetime
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.account.tests.tools import create_chart, get_accounts
|
||||
>>> from trytond.modules.company.tests.tools import create_company, get_company
|
||||
>>> from trytond.tests.tools import activate_modules, assertEqual
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules('sale_subscription_asset')
|
||||
|
||||
Create company::
|
||||
|
||||
>>> _ = create_company()
|
||||
>>> company = get_company()
|
||||
|
||||
Create chart of accounts::
|
||||
|
||||
>>> _ = create_chart(company)
|
||||
>>> accounts = get_accounts(company)
|
||||
>>> revenue = accounts['revenue']
|
||||
|
||||
Create party::
|
||||
|
||||
>>> Party = Model.get('party.party')
|
||||
|
||||
>>> customer = Party(name='Customer')
|
||||
>>> customer.save()
|
||||
|
||||
Create some assets::
|
||||
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Uom = Model.get('product.uom')
|
||||
>>> unit, = Uom.find([('name', '=', 'Unit')])
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = 'Asset'
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'assets'
|
||||
>>> template.list_price = Decimal(1000)
|
||||
>>> template.save()
|
||||
>>> asset, = template.products
|
||||
|
||||
And some lots linked to the asset::
|
||||
|
||||
>>> StockLot = Model.get('stock.lot')
|
||||
>>> lot1 = StockLot(number='001', product=asset)
|
||||
>>> lot1.save()
|
||||
>>> lot2 = StockLot(number='002', product=asset)
|
||||
>>> lot2.save()
|
||||
|
||||
Create subscription recurrence rule sets::
|
||||
|
||||
>>> RecurrenceRuleSet = Model.get('sale.subscription.recurrence.rule.set')
|
||||
|
||||
>>> monthly = RecurrenceRuleSet(name='Monthly')
|
||||
>>> rule, = monthly.rules
|
||||
>>> rule.freq = 'monthly'
|
||||
>>> rule.interval = 1
|
||||
>>> monthly.save()
|
||||
|
||||
Create subscription service::
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = 'Rental'
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'service'
|
||||
>>> template.list_price = Decimal('10')
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
>>> Service = Model.get('sale.subscription.service')
|
||||
>>> service = Service()
|
||||
>>> service.product = product
|
||||
>>> service.asset_lots.extend([lot1, lot2])
|
||||
>>> service.save()
|
||||
|
||||
>>> sorted(l.number for l in service.asset_lots_available)
|
||||
['001', '002']
|
||||
|
||||
Subscribe::
|
||||
|
||||
>>> Subscription = Model.get('sale.subscription')
|
||||
|
||||
>>> subscription = Subscription()
|
||||
>>> subscription.party = customer
|
||||
>>> subscription.start_date = datetime.date(2016, 1, 1)
|
||||
>>> subscription.invoice_start_date = datetime.date(2016, 2, 1)
|
||||
>>> subscription.invoice_recurrence = monthly
|
||||
>>> line = subscription.lines.new()
|
||||
>>> line.service = service
|
||||
>>> line.quantity = 1
|
||||
|
||||
>>> subscription.click('quote')
|
||||
>>> subscription.click('run')
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
RequiredValidationError: ...
|
||||
|
||||
>>> subscription.click('draft')
|
||||
>>> line, = subscription.lines
|
||||
>>> line.asset_lot = lot1
|
||||
>>> subscription.click('quote')
|
||||
>>> subscription.click('run')
|
||||
|
||||
>>> with config.set_context(date=datetime.date(2017, 1, 1)):
|
||||
... lot1.reload()
|
||||
... subscribed_line = lot1.subscribed
|
||||
... service.reload()
|
||||
... lots_available = sorted(
|
||||
... l.number for l in service.asset_lots_available)
|
||||
>>> assertEqual(subscribed_line, line)
|
||||
>>> lots_available
|
||||
['002']
|
||||
|
||||
Creating an overlapping line won't work::
|
||||
|
||||
>>> overlapping = Subscription()
|
||||
>>> overlapping.party = customer
|
||||
>>> overlapping.start_date = datetime.date(2017, 1, 1)
|
||||
>>> overlapping.invoice_start_date = datetime.date(2017, 2, 1)
|
||||
>>> overlapping.invoice_recurrence = monthly
|
||||
>>> line = overlapping.lines.new()
|
||||
>>> line.service = service
|
||||
>>> line.start_date = datetime.date(2017, 1, 1)
|
||||
>>> line.quantity = 1
|
||||
>>> line.asset_lot = lot1
|
||||
>>> overlapping.save()
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValidationError: ....
|
||||
|
||||
Cancelling the subscription will remove lot from the lines thus making it
|
||||
available again::
|
||||
|
||||
>>> another_subscription = Subscription()
|
||||
>>> another_subscription.party = customer
|
||||
>>> another_subscription.start_date = datetime.date(2018, 1, 1)
|
||||
>>> another_subscription.invoice_start_date = datetime.date(2018, 2, 1)
|
||||
>>> another_subscription.invoice_recurrence = monthly
|
||||
>>> line = another_subscription.lines.new()
|
||||
>>> line.service = service
|
||||
>>> line.asset_lot = lot2
|
||||
>>> line.quantity = 1
|
||||
|
||||
>>> another_subscription.click('quote')
|
||||
>>> service.reload()
|
||||
>>> sorted(l.number for l in service.asset_lots_available)
|
||||
[]
|
||||
|
||||
>>> another_subscription.click('cancel')
|
||||
>>> [l.asset_lot for l in another_subscription.lines]
|
||||
[None]
|
||||
>>> service.reload()
|
||||
>>> sorted(l.number for l in service.asset_lots_available)
|
||||
['002']
|
||||
12
modules/sale_subscription_asset/tests/test_module.py
Executable file
12
modules/sale_subscription_asset/tests/test_module.py
Executable file
@@ -0,0 +1,12 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
|
||||
|
||||
class SaleSubscriptionAssetTestCase(ModuleTestCase):
|
||||
'Test Sale Subscription Asset module'
|
||||
module = 'sale_subscription_asset'
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
8
modules/sale_subscription_asset/tests/test_scenario.py
Executable file
8
modules/sale_subscription_asset/tests/test_scenario.py
Executable file
@@ -0,0 +1,8 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.tests.test_tryton import load_doc_tests
|
||||
|
||||
|
||||
def load_tests(*args, **kwargs):
|
||||
return load_doc_tests(__name__, __file__, *args, **kwargs)
|
||||
10
modules/sale_subscription_asset/tryton.cfg
Executable file
10
modules/sale_subscription_asset/tryton.cfg
Executable file
@@ -0,0 +1,10 @@
|
||||
[tryton]
|
||||
version=7.2.0
|
||||
depends:
|
||||
ir
|
||||
sale_subscription
|
||||
stock_lot
|
||||
xml:
|
||||
sale.xml
|
||||
stock.xml
|
||||
message.xml
|
||||
9
modules/sale_subscription_asset/view/stock_lot_form.xml
Executable file
9
modules/sale_subscription_asset/view/stock_lot_form.xml
Executable file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form/field[@name='product']" position="after">
|
||||
<label name="subscribed"/>
|
||||
<field name="subscribed"/>
|
||||
</xpath>
|
||||
</data>
|
||||
10
modules/sale_subscription_asset/view/subscription_line_form.xml
Executable file
10
modules/sale_subscription_asset/view/subscription_line_form.xml
Executable file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form/notebook/page[@id='general']/field[@name='unit_price']" position="after">
|
||||
<label name="asset_lot"/>
|
||||
<field name="asset_lot"/>
|
||||
<newline/>
|
||||
</xpath>
|
||||
</data>
|
||||
8
modules/sale_subscription_asset/view/subscription_line_list.xml
Executable file
8
modules/sale_subscription_asset/view/subscription_line_list.xml
Executable file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/tree/field[@name='service']" position="after">
|
||||
<field name="asset_lot"/>
|
||||
</xpath>
|
||||
</data>
|
||||
9
modules/sale_subscription_asset/view/subscription_service_form.xml
Executable file
9
modules/sale_subscription_asset/view/subscription_service_form.xml
Executable file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form/field[@name='consumption_delay']" position="after">
|
||||
<field name="asset_lots" colspan="4"/>
|
||||
<field name="asset_lots_available" colspan="4"/>
|
||||
</xpath>
|
||||
</data>
|
||||
Reference in New Issue
Block a user