initial commit

This commit is contained in:
devapp
2021-11-29 11:56:30 +01:00
parent 016e45a01c
commit 5b67068faa
4285 changed files with 927085 additions and 2 deletions

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<form name="app-business-project-config-form" title="App business project" model="com.axelor.apps.base.db.AppBusinessProject" canDelete="false" canNew="false" width="large">
<panel name="mainPanel">
<field name="generateProjectOrder" widget="boolean-switch"/>
<field name="automaticProject" widget="boolean-switch"/>
<field name="generatedElementTypeSelect"/>
<field name="projectSaleOrderLines" widget="boolean-switch"/>
<field name="projectPurchaseOrderLines" widget="boolean-switch"/>
<field name="projectInvoiceLines" widget="boolean-switch"/>
<field name="productInvoicingProject" canEdit="false"/>
<field name="showPurchaseOrderLineRelatedToProject" widget="boolean-switch"/>
<field name="showSaleOrderLineRelatedToProject" widget="boolean-switch"/>
<field name="showProductionOrderRelatedToProject" widget="boolean-switch"/>
<field name="showExpenseLineRelatedToProject" widget="boolean-switch"/>
<field name="showPurchaseInvoiceLineRelatedToProject" widget="boolean-switch"/>
<field name="showSaleInvoiceLineRelatedToProject" widget="boolean-switch"/>
<field name="enableToInvoiceTimesheet" widget="boolean-switch" />
<field name="enableToInvoiceExpense" widget="boolean-switch" />
<field name="enableTaskTemplatesByProduct" widget="boolean-switch"/>
<field name="preTaskStatusSet" widget="MultiSelect"/>
<field name="postTaskStatusSet" widget="MultiSelect"/>
<field name="exculdeTaskInvoicing"/>
</panel>
<panel-mail name="mailPanel">
<mail-messages limit="4"/>
<mail-followers/>
</panel-mail>
</form>
</object-views>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<form id="business-project-batch-form" name="batch-form" title="Batch" model="com.axelor.apps.base.db.Batch" extension="true">
<extend target="//field[@name='comments']">
<insert position="after">
<field name="projectInvoicingAssistantBatch" hidden="true"/>
<field name="projectInvoicingAssistantBatch.actionSelect" hidden="true"/>
</insert>
</extend>
</form>
</object-views>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="expense-line-project-grid" title="Expense lines" model="com.axelor.apps.hr.db.ExpenseLine">
<hilite if="$get('expense.statusSelect') &lt; 3 &amp;&amp; toInvoice &amp;&amp; !invoiced" color="info"/>
<hilite if="invoiced" color="success"/>
<field name="project" />
<field name="expense.expenseSeq" title="Expense" width="120"/>
<field name="user"/>
<field name="expenseProduct" canView="false" readonly="true"/>
<field name="expenseDate" readonly="true"/>
<field name="totalAmount" aggregate="sum" readonly="true"/>
<field name="toInvoice"/>
<field name="invoiced"/>
<button name="updateToInvoiceBtn" title="Update to invoice" readonlyIf="invoiced" icon="fa-check-circle" onClick="action-expense-line-method-update-to-invoice" />
<field name="expense" hidden="true"/>
<field name="expense.statusSelect" hidden="true"/>
</grid>
<action-attrs name="action-expense-line-attrs-domain-project" id="business-project-action-expense-line-attrs-domain-project">
<attribute name="domain" for="project" expr="eval: &quot; self.imputable = true AND (${__user__.id} MEMBER OF self.membersUserSet OR self.assignedTo.id = ${__user__.id}) &quot;"/>
</action-attrs>
<action-method name="action-expense-line-method-update-to-invoice" >
<call class="com.axelor.apps.businessproject.web.ExpenseLineProjectController" method="updateToInvoice"/>
</action-method>
<action-method name="action-expense-line-method-set-project">
<call class="com.axelor.apps.businessproject.web.ExpenseLineProjectController" method="setProject"/>
</action-method>
<action-method name="action-expense-line-method-unset-project">
<call class="com.axelor.apps.businessproject.web.ExpenseLineProjectController" method="unsetProject"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<action-method name="action-invoice-business-project-method-print-annex">
<call class="com.axelor.apps.businessproject.web.InvoiceController" method="exportAnnex"/>
</action-method>
<action-method name="action-invoice-business-project-method-update-lines">
<call class="com.axelor.apps.businessproject.web.InvoiceController" method="updateLines"/>
</action-method>
<action-record name="action-invoice-record-printing-fields" model="com.axelor.apps.account.db.Invoice">
<field name="displayTimesheetOnPrinting" expr="eval: __user__.activeCompany?.accountConfig?.displayTimesheetOnPrinting"/>
<field name="displayExpenseOnPrinting" expr="eval: __user__.activeCompany?.accountConfig?.displayExpenseOnPrinting"/>
</action-record>
</object-views>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="invoice-line-project-grid" title="Invoice lines" model="com.axelor.apps.account.db.InvoiceLine" >
<field name="project"/>
<field name="invoice" width="120"/>
<field name="product.code" width="120"/>
<field name="productName"/>
<field name="qty" aggregate="sum"/>
<field name="price" x-scale="2"/>
<field name="unit" form-view="unit-form" grid-view="unit-grid"/>
<field name="exTaxTotal" aggregate="sum"/>
<field name="inTaxTotal" aggregate="sum"/>
</grid>
<action-method name="action-invoice-line-method-set-customer-invoice-line-project">
<call class="com.axelor.apps.businessproject.web.InvoiceLineProjectController" method="setCustomerInvoiceLineProject"/>
</action-method>
<action-method name="action-invoice-line-method-unset-customer-invoice-line-project">
<call class="com.axelor.apps.businessproject.web.InvoiceLineProjectController" method="unsetCustomerInvoiceLineProject"/>
</action-method>
<action-method name="action-invoice-line-method-set-supplier-invoice-line-project">
<call class="com.axelor.apps.businessproject.web.InvoiceLineProjectController" method="setSupplierInvoiceLineProject"/>
</action-method>
<action-method name="action-invoice-line-method-unset-supplier-invoice-line-project">
<call class="com.axelor.apps.businessproject.web.InvoiceLineProjectController" method="unsetSupplierInvoiceLineProject"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="invoicing-project-grid" title="Invoicing business projects" model="com.axelor.apps.businessproject.db.InvoicingProject">
<field name="invoice" width="120"/>
<field name="project" form-view="project-form" grid-view="project-grid"/>
<field name="deadlineDate"/>
<field name="createdOn"/>
<field name="comments"/>
</grid>
<form name="invoicing-project-form" title="Invoicing business project" model="com.axelor.apps.businessproject.db.InvoicingProject"
onNew="action-invoicing-project-group-on-new" onLoad="action-invoicing-project-attrs-title-project" width="large">
<toolbar>
<button name="deleteBtn" hidden="true" showIf="invoice == null" title="Delete"/>
</toolbar>
<panel name="mainPanel">
<field name="statusSelect" widget="NavSelect" showTitle="false" colSpan="12" readonly="true"/>
<field name="project" form-view="project-form" grid-view="project-grid" onChange="action-invoicing-project-method-fill-in"/>
<field name="deadlineDate" readonlyIf="invoice" onChange="action-invoicing-project-method-fill-in"/>
<field name="attachAnnexToInvoice" widget="boolean-switch" readonlyIf="invoice"/>
<button name="generateInvoiceBtn" title="Generate Invoice" onClick="save,action-invoicing-project-method-generate-invoice" hideIf="invoice != null"/>
<field name="invoice" readonly="true" form-view="invoice-form" grid-view="invoice-grid" edit-window="blank"/>
<button name="seeLinkedTimesheetLinesBtn" title="See Linked Timesheet Lines" onClick="action-invoicing-project-show-timesheet-lines" hidden="true" showIf="invoice != null"/>
</panel>
<panel name="commentsPanel">
<field name="comments" colSpan="12" />
</panel>
<panel-tabs name="mainPanelTab">
<panel name="listPanel" title="Elements To Invoice">
<panel-related title="Sale" field="saleOrderLineSet"
colSpan="12" canNew="false" canEdit="false"
canSelect="false"
form-view="sale-order-line-form"
grid-view="sale-order-line-grid"
showIf="saleOrderLineSet &amp;&amp; saleOrderLineSet.length &gt; 0"
readonlyIf="invoice"
name="saleOrderLineSetPanel"/>
<panel-related title="Purchase" field="purchaseOrderLineSet"
colSpan="12" canNew="false" canEdit="false"
canSelect="false"
grid-view="purchase-order-line-invoicing-project-grid"
form-view="purchase-order-line-form"
showIf="purchaseOrderLineSet &amp;&amp; purchaseOrderLineSet.length &gt; 0"
readonlyIf="invoice"
name="purchaseOrderLineSetPanel"/>
<panel-related title="Time spent" field="logTimesSet"
colSpan="12" canNew="false" canEdit="false"
canSelect="false"
grid-view="timesheet-line-project-grid"
form-view="timesheet-line-project-form"
showIf="logTimesSet &amp;&amp; logTimesSet.length &gt; 0"
readonlyIf="invoice"
name="logTimesSetPanel"/>
<panel-related title="Expenses" field="expenseLineSet"
colSpan="12" canNew="false" canEdit="false"
canSelect="false" form-view="expense-line-form"
grid-view="expense-line-grid"
showIf="expenseLineSet &amp;&amp; expenseLineSet.length &gt; 0"
readonlyIf="invoice"
name="expenseLineSetPanel"/>
<panel-related field="projectSet" colSpan="12" canNew="false"
canEdit="false" canSelect="false"
form-view="project-form" grid-view="project-grid"
showIf="projectSet &amp;&amp; projectSet.length &gt; 0"
readonlyIf="invoice"
name="projectSetPanel"/>
<panel-related title="Production" field="manufOrderSet"
colSpan="12" canNew="false" canEdit="false"
canSelect="false"
if-module="axelor-business-production"
grid-view="manuf-order-invoicing-project-grid"
form-view="manuf-order-form"
showIf="manufOrderSet &amp;&amp; manufOrderSet.length &gt; 0"
readonlyIf="invoice"
if="__config__.app.isApp('production') &amp;&amp; __config__.app.getApp('production').getManageBusinessProduction()"
name="manufOrderSetPanel"/>
<panel-related field="teamTaskSet" colSpan="12" canNew="false"
canEdit="false" canSelect="false"
form-view="team-task-form" grid-view="business-project-team-task-grid"
showIf="teamTaskSet &amp;&amp; teamTaskSet.length &gt; 0"
readonlyIf="invoice"
name="teamTaskSetPanel"/>
</panel>
<panel name="configurationsPanel" title="Configurations" readonlyIf="invoice">
<field name="saleOrderLineSetPrioritySelect"/>
<field name="purchaseOrderLineSetPrioritySelect"/>
<field name="logTimesSetPrioritySelect"/>
<field name="expenseLineSetPrioritySelect"/>
<field name="projectSetPrioritySelect"/>
<field name="teamTaskSetPrioritySelect"/>
</panel>
</panel-tabs>
</form>
<action-group name="action-invoicing-project-group-on-new">
<action name="action-invoicing-project-attrs-title-project"/>
<action name="action-invoicing-project-record-default"/>
<action name="action-invoicing-project-method-fill-in" if="project != null"/>
</action-group>
<action-method name="action-invoicing-project-method-generate-invoice">
<call class="com.axelor.apps.businessproject.web.InvoicingProjectController" method="generateInvoice"/>
</action-method>
<action-method name="action-invoicing-project-method-fill-in">
<call class="com.axelor.apps.businessproject.web.InvoicingProjectController" method="fillIn"/>
</action-method>
<action-attrs name="action-invoicing-project-attrs-title-project">
<attribute name="title" for="project" expr="eval: __config__.app.getApp('project').getProjectLabel()" if="!com.google.common.base.Strings.isNullOrEmpty(__config__.app.getApp('project').getProjectLabel())"/>
<attribute name="title" for="projectSet" expr="eval: __config__.app.getApp('project').getProjectLabel()" if="!com.google.common.base.Strings.isNullOrEmpty(__config__.app.getApp('project').getProjectLabel())"/>
</action-attrs>
<action-record name="action-invoicing-project-record-default" model="com.axelor.apps.businessproject.db.InvoicingProject">
<field name="project" expr="eval: _project"/>
</action-record>
<action-view name="action-invoicing-project-show-timesheet-lines" title="Timesheet lines" model="com.axelor.apps.hr.db.TimesheetLine">
<view name="timesheet-line-project-grid" type="grid"/>
<view name="timesheet-line-project-form" type="form"/>
<domain>self.id IN (:list) </domain>
<context name="list" expr="eval: logTimesSet.collect{it.id}"/>
</action-view>
</object-views>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="manual-element-grid" title="Manual elements" model="com.axelor.apps.businessproject.db.ManualElement" editable="true">
<field name="title"/>
<field name="date"/>
<field name="currency" form-view="currency-form" grid-view="currency-grid"/>
<field name="turnover"/>
<field name="cost"/>
<field name="typeSelect"/>
</grid>
<form name="manual-element-form" title="Manual element" model="com.axelor.apps.businessproject.db.ManualElement" width="large">
<panel name="mainPanel">
<field name="title"/>
<field name="date"/>
<field name="currency" form-view="currency-form" grid-view="currency-grid"/>
<field name="typeSelect"/>
<field name="turnover"/>
<field name="cost"/>
</panel>
<panel name="commentsPanel">
<field name="comments" colSpan="12"/>
</panel>
</form>
</object-views>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<menuitem name="business-project-root" title="Job costing" order="-102" icon="fa-list-alt" icon-background="blue" if="__config__.app.isApp('business-project')"/>
<menuitem name="business-project-folder" parent="business-project-root" title="Project Folder" action="business.project.folder" order="5"/>
<action-view name="business.project.folder" title="Project Folder" model="com.axelor.apps.project.db.ProjectFolder">
<view type="grid" name="project-folder-grid"/>
<view type="form" name="project-folder-form"/>
</action-view>
<menuitem name="business-project-all" parent="business-project-root" order="10" title="Business projects" action="business.project.all"/>
<action-view name="business.project.all" title="Business projects" model="com.axelor.apps.project.db.Project">
<view type="grid" name="business-project-grid"/>
<view type="form" name="project-form"/>
<view type="calendar" name="project-calendar"/>
<domain>self.isBusinessProject = true</domain>
<context name="_fromBusinessProject" expr="eval:true"/>
<context name="_fromProject" expr="eval:false"/>
</action-view>
<menuitem name="business-project-root-invoicing-project" order="-102" title="Invoicing project" action="business.project.root.invoicing.project" icon="fa-tasks" icon-background="#3f6bb9" if="__config__.app.isApp('business-project')"/>
<action-view name="business.project.root.invoicing.project" title="Invoicing project" model="com.axelor.apps.businessproject.db.InvoicingProject">
<view type="grid" name="invoicing-project-grid"/>
<view type="form" name="invoicing-project-form"/>
</action-view>
<!-- ADMINISTRATION -->
<menuitem name="admin-root-batch-project-invoicing-assistant" parent="admin-root-batch" if="__config__.app.isApp('business-project')" if-module="axelor-business-project"
title="Project invoicing assistant batches" action="admin.root.batch.project.invoicing.assistant" />
<action-view name="admin.root.batch.project.invoicing.assistant" title="Project invoicing assistant batches"
model="com.axelor.apps.businessproject.db.ProjectInvoicingAssistantBatch" >
<view type="grid" name="project-invoicing-assistant-batch-grid" />
<view type="form" name="project-invoicing-assistant-batch-form" />
</action-view>
</object-views>

View File

@@ -0,0 +1,454 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="business-project-grid" title="Projects" model="com.axelor.apps.project.db.Project">
<field name="fullName"/>
<field name="company" form-view="company-form" grid-view="company-grid" if="__config__.app.getApp('base').getEnableMultiCompany()"/>
<field name="clientPartner" form-view="partner-form" grid-view="partner-grid" />
<field name="fromDate" />
<field name="toDate" />
</grid>
<action-method name="action-project-method-generate-quotation">
<call class="com.axelor.apps.businessproject.web.ProjectController" method="generateQuotation"/>
</action-method>
<action-method name="action-project-method-generate-purchase-quotation">
<call class="com.axelor.apps.businessproject.web.ProjectController" method="generatePurchaseQuotation"/>
</action-method>
<action-method name="action-project-method-print-project">
<call class="com.axelor.apps.businessproject.web.ProjectController" method="printProject"/>
</action-method>
<action-method name="action-project-method-print-planif-and-cost">
<call class="com.axelor.apps.businessproject.web.ProjectController" method="printPlannifAndCost"/>
</action-method>
<action-validate name="action-validate-unset-project">
<alert message="Are you sure wants to unlink project from selected lines?."/>
</action-validate>
<action-attrs id="business-project-action-project-project-default" name="action-project-project-default" model="com.axelor.apps.project.db.Project">
<attribute name="value" for="typeSelect" expr="eval:'project'" />
<attribute name="value" for="fromDate" expr="eval: __datetime__"/>
<attribute name="value" for="company" expr="eval:__user__.activeCompany"/>
<attribute name="value" for="assignedTo" expr="eval: __user__"/>
<attribute name="value:add" for="membersUserSet" expr="eval: __user__"/>
</action-attrs>
<action-record id="business-project-action-project-default" name="action-project-default" model="com.axelor.apps.project.db.Project">
<field name="typeSelect" expr="eval:'task'" />
<field name="company" expr="eval:__user__.activeCompany"/>
<field name="fromDate" expr="eval: __date__"/>
<field name="assignedTo" expr="eval: __user__"/>
</action-record>
<action-attrs name="action-project-attrs-set-invoicing-sequence">
<attribute name="value" for="invoicingSequenceSelect" expr="eval: null"/>
</action-attrs>
<action-method name="action-project-method-get-partner-data">
<call class="com.axelor.apps.businessproject.web.ProjectController" method="getPartnerData"/>
</action-method>
<action-view name="action-dashlet-project-show-all-invoicing-task" title="Task Invoicing" model="com.axelor.team.db.TeamTask">
<view type="grid" name="business-project-team-task-grid"/>
<view type="form" name="team-task-form"/>
<view-param name="show-toolbar" value="true" />
<view-param name="popup" value="reload"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<!-- Sales -->
<action-view name="action-project-dashlet-sale-quotation" title="Quotation" model="com.axelor.apps.sale.db.SaleOrder">
<view type="grid" name="sale-order-quotation-grid"/>
<view type="form" name="sale-order-form"/>
<view-param name="popup" value="true"/>
<domain>self.saleOrderLineList.project.id in (:_projectIds) AND self.statusSelect &lt; 3</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-sale-order" title="Sale order" model="com.axelor.apps.sale.db.SaleOrder">
<view type="grid" name="sale-order-grid"/>
<view type="form" name="sale-order-form"/>
<view-param name="popup" value="true"/>
<domain>self.saleOrderLineList.project.id in (:_projectIds) AND self.statusSelect in (3,4)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-sale-order-lines" title="Sale Order Lines" model="com.axelor.apps.sale.db.SaleOrderLine">
<view type="grid" name="sale-order-line-project-grid"/>
<view type="form" name="sale-order-line-project-form"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-confirmed-sale-order-lines" title="Sale Order Lines" model="com.axelor.apps.sale.db.SaleOrderLine">
<view type="grid" name="sale-order-line-project-grid"/>
<view type="form" name="sale-order-line-project-form"/>
<view-param name="popup" value="true"/>
<domain>self.saleOrder.statusSelect in (3,4) AND self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-customer-deliveries" title="Customer deliveries" model="com.axelor.apps.stock.db.StockMove">
<view type="grid" name="stock-move-out-grid"/>
<view type="form" name="stock-move-form"/>
<view-param name="popup" value="true"/>
<domain>self.stockMoveLineList.saleOrderLine.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-attrs name="action-project-attrs-sales-order-line-select-lines">
<attribute name="readonly" for="selectNewSOLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageSOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedSOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageSOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$salesOrderLineSet" expr="eval:false"/>
<attribute name="value" for="$salesOrderLineSet" expr="eval:false"/>
<attribute name="title" for="$salesOrderLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to add')"/>
<attribute name="domain" for="$salesOrderLineSet" expr="eval:&quot;self.saleOrder.clientPartner = :clientPartner AND self.saleOrder.statusSelect in (3,4) AND self.project is null&quot;"/>
</action-attrs>
<action-attrs name="action-project-attrs-sales-order-line-manage-lines">
<attribute name="readonly" for="selectNewSOLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageSOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedSOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageSOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$salesOrderLineSet" expr="eval:false"/>
<attribute name="value" for="$salesOrderLineSet" expr="eval:null"/>
<attribute name="title" for="$salesOrderLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to unlink')"/>
<attribute name="domain" for="$salesOrderLineSet" expr="eval:&quot;self.saleOrder.statusSelect in (3,4) AND self.project.id = :id&quot;" if="!isShowPhasesElements"/>
<attribute name="domain" for="$salesOrderLineSet" expr="eval:&quot;self.saleOrder.statusSelect in (3,4) AND (self.project.id = :id OR self.project.parentProject.id = :id)&quot;" if="isShowPhasesElements"/>
</action-attrs>
<action-attrs name="action-project-attrs-sales-order-line-cancel-manage-lines">
<attribute name="readonly" for="selectNewSOLinesBtn" expr="eval:false"/>
<attribute name="readonly" for="manageSOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="unlinkSelectedSOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedSOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="cancelManageSOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="$salesOrderLineSet" expr="eval:true"/>
</action-attrs>
<!-- Purchase -->
<action-view name="action-project-project-purchase-quotation" title="PO.Quotation" model="com.axelor.apps.purchase.db.PurchaseOrder">
<view type="grid" name="purchase-order-quotation-grid"/>
<view type="form" name="purchase-order-form"/>
<view-param name="popup" value="true"/>
<domain>self.purchaseOrderLineList.project.id in (:_projectIds) AND self.statusSelect &lt; 3</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-purchase-order" title="Purchase order" model="com.axelor.apps.purchase.db.PurchaseOrder">
<view type="grid" name="purchase-order-grid"/>
<view type="form" name="purchase-order-form"/>
<view-param name="popup" value="true"/>
<domain>self.purchaseOrderLineList.project.id in (:_projectIds) AND self.statusSelect in (3,4)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-supplier-arrivals" title="Supplier arrivals" model="com.axelor.apps.stock.db.StockMove">
<view type="grid" name="stock-move-in-grid"/>
<view type="form" name="stock-move-form"/>
<view-param name="popup" value="true"/>
<domain>self.stockMoveLineList.purchaseOrderLine.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-purchase-order-lines" title="Purchase Order Lines" model="com.axelor.apps.purchase.db.PurchaseOrderLine">
<view type="grid" name="purchase-order-line-project-grid"/>
<view type="form" name="purchase-order-line-project-form"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-analytic-move-lines" model="com.axelor.apps.account.db.AnalyticMoveLine" title="Analytic move lines">
<view name="analytic-move-line-grid" type="grid"/>
<view name="analytic-move-line-form" type="form"/>
<domain>self.project.id = :id</domain>
<context name="id" expr="eval:id"/>
</action-view>
<action-view name="action-project-view-show-confirmed-purchase-order-lines" title="Purchase Order Lines" model="com.axelor.apps.purchase.db.PurchaseOrderLine">
<view type="grid" name="purchase-order-line-project-grid"/>
<view type="form" name="purchase-order-line-project-form"/>
<view-param name="popup" value="true"/>
<domain>self.purchaseOrder.statusSelect in (3,4) AND self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-attrs name="action-project-attrs-purchase-order-line-select-lines">
<attribute name="readonly" for="selectNewPOLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="managePOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedPOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManagePOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$purchaseOrderLineSet" expr="eval:false"/>
<attribute name="value" for="$purchaseOrderLineSet" expr="eval:null"/>
<attribute name="title" for="$purchaseOrderLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to add')"/>
<attribute name="domain" for="$purchaseOrderLineSet" expr="eval:&quot;self.purchaseOrder.statusSelect in (3,4) AND self.project is null&quot;"/>
</action-attrs>
<action-attrs name="action-project-attrs-purchase-order-line-manage-lines">
<attribute name="readonly" for="selectNewPOLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="managePOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedPOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManagePOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$purchaseOrderLineSet" expr="eval:false"/>
<attribute name="value" for="$purchaseOrderLineSet" expr="eval:null"/>
<attribute name="title" for="$purchaseOrderLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to unlink')"/>
<attribute name="domain" for="$purchaseOrderLineSet" expr="eval:&quot;self.purchaseOrder.statusSelect in (3,4) AND self.project.id = :id&quot;" if="!isShowPhasesElements"/>
<attribute name="domain" for="$purchaseOrderLineSet" expr="eval:&quot;self.purchaseOrder.statusSelect in (3,4) AND (self.project.id = :id OR self.project.parentProject.id = :id)&quot;" if="isShowPhasesElements"/>
</action-attrs>
<action-attrs name="action-project-attrs-purchase-order-line-cancel-manage-lines">
<attribute name="readonly" for="selectNewPOLinesBtn" expr="eval:false"/>
<attribute name="readonly" for="managePOLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="addSelectedPOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedPOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="cancelManagePOLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="$purchaseOrderLineSet" expr="eval:true"/>
</action-attrs>
<!-- Expense -->
<action-view name="action-project-dashlet-expense-waiting" title="Waiting expenses" model="com.axelor.apps.hr.db.Expense">
<view type="grid" name="expense-grid"/>
<view type="form" name="expense-form"/>
<view-param name="popup" value="true"/>
<domain>(self.kilometricExpenseLineList.project.id in (:_projectIds) or self.generalExpenseLineList.project.id in (:_projectIds)) AND self.statusSelect &lt; 3</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-expense-validated" title="Validated expenses" model="com.axelor.apps.hr.db.Expense">
<view type="grid" name="expense-grid"/>
<view type="form" name="expense-form"/>
<view-param name="popup" value="true"/>
<domain>(self.kilometricExpenseLineList.project.id in (:_projectIds) or self.generalExpenseLineList.project.id in (:_projectIds)) AND self.statusSelect in (3,4)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-expense-lines" title="Expense lines" model="com.axelor.apps.hr.db.ExpenseLine">
<view type="grid" name="expense-line-project-grid"/>
<view type="form" name="expense-line-project-form"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-validated-expense-lines" title="Expense lines" model="com.axelor.apps.hr.db.ExpenseLine">
<view type="grid" name="expense-line-project-grid"/>
<view type="form" name="expense-line-project-form"/>
<view-param name="popup" value="true"/>
<domain>self.expense.statusSelect in (3,4) AND self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-attrs name="action-project-attrs-expense-line-select-lines">
<attribute name="readonly" for="selectNewExpenseLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageExpenseLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedExpenseLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageExpenseLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$expenseLineSet" expr="eval:false"/>
<attribute name="value" for="$expenseLineSet" expr="eval:null"/>
<attribute name="title" for="$expenseLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to add')"/>
<attribute name="domain" for="$expenseLineSet" expr="eval:&quot;self.expense.statusSelect in (3,4) AND self.project is null&quot;"/>
</action-attrs>
<action-attrs name="action-project-attrs-expense-line-manage-lines">
<attribute name="readonly" for="selectNewExpenseLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageExpenseLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedExpenseLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageExpenseLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$expenseLineSet" expr="eval:false"/>
<attribute name="value" for="$expenseLineSet" expr="eval:false"/>
<attribute name="title" for="$expenseLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to unlink')"/>
<attribute name="domain" for="$expenseLineSet" expr="eval:&quot;self.expense.statusSelect in (3,4) AND self.project.id = :id&quot;" if="!isShowPhasesElements"/>
<attribute name="domain" for="$expenseLineSet" expr="eval:&quot;self.expense.statusSelect in (3,4) AND (self.project.id = :id OR self.project.parentProject.id = :id)&quot;" if="isShowPhasesElements"/>
</action-attrs>
<action-attrs name="action-project-attrs-expense-line-cancel-manage-lines">
<attribute name="readonly" for="selectNewExpenseLinesBtn" expr="eval:false"/>
<attribute name="readonly" for="manageExpenseLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="unlinkSelectedExpenseLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedExpenseLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="cancelManageExpenseLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="$expenseLineSet" expr="eval:true"/>
</action-attrs>
<!-- Invoice -->
<action-view name="action-dashlet-project-show-all-invoicing-project" title="Invoicing projects" model="com.axelor.apps.businessproject.db.InvoicingProject">
<view type="grid" name="invoicing-project-grid"/>
<view type="form" name="invoicing-project-form"/>
<view-param name="popup" value="true"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-dashlet-customer-invoices" title="Customer invoices" model="com.axelor.apps.account.db.Invoice">
<view type="grid" name="invoice-grid"/>
<view type="form" name="invoice-form"/>
<view-param name="popup" value="true"/>
<domain>self.invoiceLineList.project.id in (:_projectIds) AND self.operationTypeSelect = 3 AND self.operationSubTypeSelect != 2</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-sale-invoice-lines" title="Customer invoice lines" model="com.axelor.apps.account.db.InvoiceLine">
<view type="grid" name="invoice-line-project-grid"/>
<view type="form" name="invoice-line-form"/>
<view-param name="popup" value="true"/>
<domain>self.invoice.operationTypeSelect = 3 AND self.project.id in (:_projectIds) AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
<context name="$isReadOnly" expr="true"/>
</action-view>
<action-view name="action-project-dashlet-supplier-invoices" title="Supplier invoices" model="com.axelor.apps.account.db.Invoice">
<view type="grid" name="invoice-supplier-grid"/>
<view type="form" name="invoice-form"/>
<view-param name="popup" value="true"/>
<domain>self.invoiceLineList.project.id in (:_projectIds) AND self.operationTypeSelect = 1 AND self.operationSubTypeSelect != 2</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-view name="action-project-view-show-purchase-invoice-lines" title="Supplier invoice lines" model="com.axelor.apps.account.db.InvoiceLine">
<view type="grid" name="invoice-line-project-grid"/>
<view type="form" name="invoice-line-form"/>
<view-param name="popup" value="true"/>
<domain>self.invoice.operationTypeSelect = 1 AND self.project.id in (:_projectIds) AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
<context name="$isReadOnly" expr="true"/>
</action-view>
<action-view name="action-project-dashlet-advance-payment-invoices" title="Advance payment invoices" model="com.axelor.apps.account.db.Invoice">
<view type="grid" name="invoice-grid"/>
<view type="form" name="invoice-form"/>
<view-param name="popup" value="true"/>
<domain>self.invoiceLineList.project.id in (:_projectIds) AND self.operationSubTypeSelect = 2</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
<action-attrs name="action-project-attrs-customer-invoice-line-select-lines">
<attribute name="readonly" for="selectNewCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$customerInvoiceLineSet" expr="eval:false"/>
<attribute name="value" for="$customerInvoiceLineSet" expr="eval:null"/>
<attribute name="title" for="$customerInvoiceLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to add')"/>
<attribute name="domain" for="$customerInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 3 AND self.invoice.partner = :clientPartner AND self.project is null AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;"/>
</action-attrs>
<action-attrs name="action-project-attrs-customer-invoice-line-manage-lines">
<attribute name="readonly" for="selectNewCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$customerInvoiceLineSet" expr="eval:false"/>
<attribute name="value" for="$customerInvoiceLineSet" expr="eval:null"/>
<attribute name="title" for="$customerInvoiceLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to unlink')"/>
<attribute name="domain" for="$customerInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 3 AND self.project.id = :id AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;" if="!isShowPhasesElements"/>
<attribute name="domain" for="$customerInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 3 AND (self.project.id = :id OR self.project.parentProject.id = :id) AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;" if="isShowPhasesElements"/>
</action-attrs>
<action-attrs name="action-project-attrs-customer-invoice-line-cancel-manage-lines">
<attribute name="readonly" for="selectNewCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="readonly" for="manageCustomerInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="unlinkSelectedCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="cancelManageCustomerInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="$customerInvoiceLineSet" expr="eval:true"/>
</action-attrs>
<action-attrs name="action-project-attrs-supplier-invoice-line-select-lines">
<attribute name="readonly" for="selectNewSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="addSelectedSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$supplierInvoiceLineSet" expr="eval:false"/>
<attribute name="value" for="$supplierInvoiceLineSet" expr="eval:null"/>
<attribute name="title" for="$supplierInvoiceLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to add')"/>
<attribute name="domain" for="$supplierInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 1 AND self.project is null AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;"/>
</action-attrs>
<action-attrs name="action-project-attrs-supplier-invoice-line-manage-lines">
<attribute name="readonly" for="selectNewSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="readonly" for="manageSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="cancelManageSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="$supplierInvoiceLineSet" expr="eval:false"/>
<attribute name="value" for="$supplierInvoiceLineSet" expr="eval:null"/>
<attribute name="title" for="$supplierInvoiceLineSet" expr="eval:com.axelor.i18n.I18n.get('Select lines to unlink')"/>
<attribute name="domain" for="$supplierInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 1 AND self.project.id = :id AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;" if="!isShowPhasesElements"/>
<attribute name="domain" for="$supplierInvoiceLineSet" expr="eval:&quot;self.invoice.operationTypeSelect = 1 AND (self.project.id = :id OR self.project.parentProject.id = :id) AND self.invoice.statusSelect = 3 AND self.invoice.operationSubTypeSelect != 2&quot;" if="isShowPhasesElements"/>
</action-attrs>
<action-attrs name="action-project-attrs-supplier-invoice-line-cancel-manage-lines">
<attribute name="readonly" for="selectNewSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="readonly" for="manageSupplierInvoiceLinesBtn" expr="eval:false"/>
<attribute name="hidden" for="addSelectedSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="unlinkSelectedSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="cancelManageSupplierInvoiceLinesBtn" expr="eval:true"/>
<attribute name="hidden" for="$supplierInvoiceLineSet" expr="eval:true"/>
</action-attrs>
<!-- Production -->
<action-view name="action-project-view-show-production-orders" title="Production orders" model="com.axelor.apps.production.db.ProductionOrder">
<view type="grid" name="production-order-grid"/>
<view type="form" name="production-order-form"/>
<domain>self.project.id in (:_projectIds)</domain>
<context if="id == null" name="_projectIds" expr="eval:[0]" />
<context if="id != null &amp;&amp; !isShowPhasesElements" name="_projectIds" expr="eval:[id]"/>
<context if="id != null &amp;&amp; isShowPhasesElements" name="_projectIds" expr="eval:[id] + childProjectList.collect{it->it.id}"/>
</action-view>
</object-views>

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="project-invoicing-assistant-batch-grid" title="Project invoicing assistant batches" model="com.axelor.apps.businessproject.db.ProjectInvoicingAssistantBatch">
<field name="actionSelect" />
<field name="code" x-bind="{{code|unaccent|uppercase}}" />
<field name="company" form-view="company-form" grid-view="company-grid" if="__config__.app.getApp('base').getEnableMultiCompany()"/>
<field name="createdOn"/>
<field name="createdBy" form-view="user-form" grid-view="user-grid"/>
</grid>
<form name="project-invoicing-assistant-batch-form" title="Project invoicing assistant batch" model="com.axelor.apps.businessproject.db.ProjectInvoicingAssistantBatch"
onNew="action-project-invoicing-assistant-batch-record-on-new">
<panel name="mainPanel">
<field name="actionSelect" onChange="action-base-batch-attrs-action-select"/>
<field name="code" x-bind="{{code|unaccent|uppercase}}" onChange="action-base-batch-condition-check-unique-code"/>
<field name="company" widget="SuggestBox" form-view="company-form" grid-view="company-grid"/>
</panel>
<panel name="informationPanel" title="Information">
<field name="createdOn" title="Created on"/>
<field name="createdBy" title="Created by" form-view="user-form" grid-view="user-grid"/>
<field name="description" showTitle="false" colSpan="12"/>
<panel-related name="batchListPanel" field="batchList" colSpan="12" form-view="batch-form" grid-view="batch-grid"/>
</panel>
<panel name="actionPanel" sidebar="true">
<button name="updateTaskBtn" title="Update tasks" onClick="save,action-project-invoicing-assistant-batch-method-update-task" showIf="actionSelect == 1"/>
<button name="generateInvoicingProjectBtn" title="Generate invoicing projects" onClick="save,action-project-invoicing-assistant-batch-method-generate-inv-project" showIf="actionSelect == 2"/>
</panel>
</form>
<action-record name="action-project-invoicing-assistant-batch-record-on-new" model="com.axelor.apps.businessproject.db.ProjectInvoicingAssistantBatch">
<field name="createdOn" expr="eval:__config__.app.getTodayDate()"/>
<field name="createdBy" expr="eval:__user__"/>
<field name="company" expr="eval:__user__.activeCompany" if="__user__.activeCompany != null"/>
<field name="company" expr="eval:__repo__(Company).all().fetchOne()" if="__user__.activeCompany == null &amp;&amp; __repo__(Company).all().fetch().size == 1"/>
</action-record>
<action-method name="action-project-invoicing-assistant-batch-method-update-task">
<call class="com.axelor.apps.businessproject.web.ProjectInvoicingAssistantBatchController" method="actionUpdateTask"/>
</action-method>
<action-method name="action-project-invoicing-assistant-batch-method-show-task">
<call class="com.axelor.apps.businessproject.web.ProjectInvoicingAssistantBatchController" method="showUpdatedTask"/>
</action-method>
<action-method name="action-project-invoicing-assistant-batch-method-show-timesheet-line">
<call class="com.axelor.apps.businessproject.web.ProjectInvoicingAssistantBatchController" method="showUpdatedTimesheetLine"/>
</action-method>
<action-method name="action-project-invoicing-assistant-batch-method-generate-inv-project">
<call class="com.axelor.apps.businessproject.web.ProjectInvoicingAssistantBatchController" method="actionGenerateInvoicingProject"/>
</action-method>
<action-method name="action-project-invoicing-assistant-batch-method-show-inv-project">
<call class="com.axelor.apps.businessproject.web.ProjectInvoicingAssistantBatchController" method="showGeneratedInvoicingProject"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<action-method name="action-business-project-purchase-order-method-update-lines">
<call class="com.axelor.apps.businessproject.web.PurchaseOrderProjectController" method="updateLines"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="purchase-order-line-project-grid" title="Purchase order lines" model="com.axelor.apps.purchase.db.PurchaseOrderLine">
<hilite if="$get('purchaseOrder.statusSelect') &lt; 3 &amp;&amp; toInvoice &amp;&amp; !invoiced" color="info"/>
<hilite if="invoiced" color="success"/>
<field name="project" />
<field name="purchaseOrder" form-view="purchase-order-form" grid-view="purchase-order-grid" readonly="true"/>
<field name="supplierPartner" form-view="partner-form" grid-view="partner-grid" readonly="true"/>
<field name="productName" readonly="true"/>
<field name="exTaxTotal" aggregate="sum" readonly="true"/>
<field name="amountInvoiced"/>
<field name="purchaseOrder.currency" />
<field name="toInvoice"/>
<field name="invoiced"/>
<button name="updateToInvoiceBtn" title="Update to invoice" readonlyIf="invoiced" icon="fa-check-circle" onClick="action-purchase-order-line-method-update-to-invoice" />
<field name="purchaseOrder.statusSelect" hidden="true"/>
</grid>
<action-method name="action-purchase-order-line-method-set-project">
<call class="com.axelor.apps.businessproject.web.PurchaseOrderLineProjectController" method="setProject"/>
</action-method>
<action-method name="action-purchase-order-line-method-unset-project">
<call class="com.axelor.apps.businessproject.web.PurchaseOrderLineProjectController" method="unsetProject"/>
</action-method>
<action-method name="action-purchase-order-line-method-update-to-invoice">
<call class="com.axelor.apps.businessproject.web.PurchaseOrderLineProjectController" method="updateToInvoice"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<form name="sale-order-form" title="Sale order" model="com.axelor.apps.sale.db.SaleOrder" id="business-project-sale-order-form" extension="true">
<extend target="/">
<attribute name="onLoad" value="action-group-business-project-saleorder-onload"/>
</extend>
</form>
<form name="sale-order-template-form" title="Template" model="com.axelor.apps.sale.db.SaleOrder" id="business-project-sale-order-template-form" extension="true">
<extend target="/">
<attribute name="onNew" value="action-group-sale-saleorder-onnew,action-saleorder-record-template,action-sale-order-method-create-template"/>
</extend>
</form>
<action-group name="action-group-business-project-saleorder-onload">
<action name="action-group-supplychain-saleorder-onload"/>
<action name="action-sale-order-attrs-project"/>
</action-group>
<action-attrs name="action-sale-order-attrs-project">
<attribute for="$genProjTypePerOrderLine" name="value" if="eval: __config__.app.getApp('business-project').getGeneratedElementTypeSelect() == 1" expr="eval: com.axelor.apps.project.db.GenProjTypePerOrderLine.TASK_BY_LINE"/>
<attribute for="$genProjTypePerOrderLine" name="value" if="eval: __config__.app.getApp('business-project').getGeneratedElementTypeSelect() == 2" expr="eval: com.axelor.apps.project.db.GenProjTypePerOrderLine.PHASE_BY_LINE"/>
<attribute for="$genProjTypePerOrderLine" name="readonly" expr="eval: __config__.app.getApp('business-project').getGeneratedElementTypeSelect() != 3"/>
</action-attrs>
<action-method name="action-business-project-sale-order-method-generate-invoicing-project">
<call class="com.axelor.apps.businessproject.web.SaleOrderProjectController" method="generateInvoicingProject"/>
</action-method>
<action-condition name="action-business-project-sale-order-condition-invoicing">
<check error="A deadline is required" field="deadline" if="!deadline"/>
</action-condition>
<action-method name="action-business-project-method-generate-project">
<call class="com.axelor.apps.businessproject.web.SaleOrderProjectController" method="generateProject"/>
</action-method>
<action-method name="action-business-project-method-fill-project">
<call class="com.axelor.apps.businessproject.web.SaleOrderProjectController" method="fillProject"/>
</action-method>
<action-method name="action-business-project-sale-order-method-update-lines">
<call class="com.axelor.apps.businessproject.web.SaleOrderProjectController" method="updateLines"/>
</action-method>
</object-views>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid name="sale-order-line-project-grid" title="Sale order lines" model="com.axelor.apps.sale.db.SaleOrderLine" orderBy="-saleOrder.orderDate">
<hilite if="$get('saleOrder.statusSelect') &lt; 3 &amp;&amp; toInvoice &amp;&amp; !invoiced" color="info"/>
<hilite if="invoiced" color="success"/>
<field name="project" />
<field name="saleOrder.saleOrderSeq" width="120" title="Reference"/>
<field name="saleOrder.creationDate"/>
<field name="product.code" width="120"/>
<field name="productName" readonly="true"/>
<field name="reservedQty" if="__config__.app.getApp('supplychain')?.manageStockReservation" aggregate="sum" readonly="true"/>
<field name="exTaxTotal" aggregate="sum" readonly="true"/>
<field name="amountInvoiced" />
<field name="saleOrder.currency"/>
<field name="toInvoice"/>
<button name="updateToInvoiceBtn" title="Update to invoice" readonlyIf="amountInvoiced >= exTaxTotal" icon="fa-check-circle" onClick="action-sale-order-line-method-update-to-invoice" />
<field name="saleOrder.statusSelect" hidden="true"/>
<field name="invoiced" hidden="true" />
</grid>
<action-method name="action-sale-order-line-method-set-project">
<call class="com.axelor.apps.businessproject.web.SaleOrderLineProjectController" method="setProject"/>
</action-method>
<action-method name="action-sale-order-line-method-unset-project">
<call class="com.axelor.apps.businessproject.web.SaleOrderLineProjectController" method="unsetProject"/>
</action-method>
<action-method name="action-sale-order-line-method-update-to-invoice">
<call class="com.axelor.apps.businessproject.web.SaleOrderLineProjectController" method="updateToInvoice"/>
</action-method>
<action-record name="action-sale-order-line-record-update-to-invoice" model="com.axelor.apps.sale.db.SaleOrderLine">
<field name="toInvoice" expr="eval:!toInvoice" if="!invoiced"/>
</action-record>
</object-views>

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<selection name="business.team.task.invoicing.type.select">
<option value="1">Time spent</option>
<option value="2">Package</option>
<option value="3">No invoicing</option>
</selection>
<selection name="business.project.invoicing.sequence.select">
<option value="0">Empty</option>
<option value="1">Invoice pre task</option>
<option value="2">Invoice post task</option>
</selection>
<selection name="invoicing.project.priority.select">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</selection>
<selection name="business.project.charging.back.purchases.select">
<option value="1">Identically</option>
<option value="2">With price list</option>
<option value="3">With percentage</option>
</selection>
<selection name="business.project.config.generated.element.type">
<option value="1">Task</option>
<option value="2">Project Phase</option>
<option value="3">Free</option>
</selection>
<selection name="business.project.manual.element.type.select">
<option value="1">Remaining</option>
<option value="2">Realised</option>
</selection>
<selection name="business.project.invoicing.project.status.select">
<option value="1">Draft</option>
<option value="2">Generated</option>
<option value="3">Validated</option>
<option value="4">Ventilated</option>
<option value="5">Canceled</option>
</selection>
<selection name="project.invoicing.assistant.batch.action.select">
<option value="1">Update Tasks</option>
<option value="2">Generate invoicing projects</option>
</selection>
</object-views>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<grid model="com.axelor.team.db.TeamTask" title="Tasks" name="business-project-team-task-grid" orderBy="-taskDate">
<field name="project"/>
<field name="name"/>
<field name="taskDate"/>
<field name="status"/>
<field name="progressSelect" widget="SelectProgress"/>
<field name="exTaxTotal"/>
<field name="toInvoice"/>
<field name="invoiced"/>
<button name="updateToInvoiceBtn" title="Update to invoice" readonlyIf="invoiced" icon="fa-check-circle" onClick="action-team-task-method-update-to-invoice"/>
</grid>
<action-method name="action-team-task-method-update-to-invoice">
<call class="com.axelor.apps.businessproject.web.TeamTaskController" method="updateToInvoice"/>
</action-method>
<action-method name="action-team-task-method-update-discount">
<call class="com.axelor.apps.businessproject.web.TeamTaskController" method="updateDiscount"/>
</action-method>
<action-method name="action-team-task-method-compute">
<call class="com.axelor.apps.businessproject.web.TeamTaskController" method="compute"/>
</action-method>
<action-attrs name="action-team-task-attrs-scale-and-precision">
<attribute name="scale" for="priceDiscounted" expr="eval: __config__.app.getNbDecimalDigitForUnitPrice()"/>
<attribute name="scale" for="discountAmount" expr="eval: __config__.app.getNbDecimalDigitForUnitPrice()"/>
</action-attrs>
</object-views>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<action-attrs name="action-team-task-category-attrs-set-invoicing-type">
<attribute name="value" for="invoicingType" expr="eval: null"/>
</action-attrs>
</object-views>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
<action-attrs name="action-timesheet-line-attrs-domain-project" id="business-project-action-timesheet-line-attrs-domain-project">
<attribute name="domain" for="project" expr="eval: &quot; self.imputable = true AND (${__user__.id} MEMBER OF self.membersUserSet OR self.assignedTo.id = ${__user__.id}) &quot;"/>
</action-attrs>
<action-method name="action-timesheet-line-method-set-default-to-invoice">
<call class="com.axelor.apps.businessproject.web.TimesheetLineBusinessController" method="setDefaultToInvoice"/>
</action-method>
</object-views>