first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View 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.

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,50 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
"Les dates de les línies de subscripció amb el mateix lot d'actius no es "
"poden solapar."
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Servei de subscripció - Lot del actiu"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,50 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
"Die Datumsangaben von Abonnementpositionen mit demselben Vermögensgegenstand"
" dürfen sich nicht überschneiden."
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Abonnement Dienstleistung - Charge Abonnement Objekt"

View File

@@ -0,0 +1,50 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
"Las fechas de líneas de suscripción con el mismo lote de activos no pueden "
"superponerse."
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Servicio de suscripción - Lote del activo"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View 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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
#, fuzzy
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "قطعه موجودی دارایی - خدمات اشتراک"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,50 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
"Les dates des lignes dabonnement ayant le même lot dactifs ne peuvent pas "
"se chevaucher."
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Service d'abonnement en vente - Lot d'actif de stock"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View 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 "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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
#, fuzzy
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Servizio in abbonamento - Stock lotto cespiti"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,50 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
"De datums van abonnementsregels met dezelfde activakavel mogen niet "
"overlappen."
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr "Verkoop abonnementsservice - Voorraad batch activa"

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View File

@@ -0,0 +1,48 @@
#
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 dates of subscription lines with the same asset lot can not overlap."
msgstr ""
msgctxt "model:sale.subscription.service-stock.lot.asset,string:"
msgid "Sale Subscription Service - Stock Lot Asset"
msgstr ""

View 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 dates of subscription lines with the same asset lot can not overlap.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,121 @@
# 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.operators import Equal
from trytond.model import Exclude, ModelSQL, ModelView, Workflow, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If
from trytond.sql.functions import DateRange
from trytond.sql.operators import RangeOverlap
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):
__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().cancel(subscriptions)
@classmethod
@ModelView.button
@Workflow.transition('running')
def run(cls, subscriptions):
pool = Pool()
Line = pool.get('sale.subscription.line')
super().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', -1)),
],
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().__setup__()
t = cls.__table__()
cls._sql_constraints += [
('dates_asset_lot_overlap',
Exclude(t,
(t.asset_lot, Equal),
(DateRange(t.start_date, t.end_date, '[)'), RangeOverlap),
),
'sale_subscription_asset.msg_asset_line_overlap'),
]
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('asset_lot')
return super().copy(lines, default)

View 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>

View 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)]

View 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>

View 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.

View File

@@ -0,0 +1,158 @@
================================
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
>>> from trytond.tests.tools import activate_modules, assertEqual
Activate modules::
>>> config = activate_modules(
... 'sale_subscription_asset', create_company, create_chart)
Get accounts::
>>> accounts = get_accounts()
>>> 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):
...
SQLConstraintError: ....
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']

View 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

View 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)

View File

@@ -0,0 +1,18 @@
[tryton]
version=7.8.0
depends:
ir
sale_subscription
stock_lot
xml:
sale.xml
stock.xml
message.xml
[register]
model:
stock.Lot
sale.SubscriptionServiceStockLot
sale.SubscriptionService
sale.Subscription
sale.SubscriptionLine

View 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>

View 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>

View 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>

View 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>