Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

91006: Check configurator is activated #14008

Open
wants to merge 3 commits into
base: wip
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,13 @@ public Configurator copy(Configurator entity, boolean deep) {
copy.setProduct(null);
return copy;
}

@Override
public Configurator save(Configurator entity) {
entity = super.save(entity);
if (entity.getConfiguratorCreator() != null && entity.getConfiguratorVersion() == null) {
entity.setConfiguratorVersion(entity.getConfiguratorCreator().getConfiguratorVersion());
}
return entity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,9 @@ private SaleExceptionMessage() {}

public static final String SALE_ORDER_DO_NOT_HAVE_CONFIGURATOR = /*$$(*/
"Sale order does not have configurator to duplicate." /*)*/;
public static final String CONFIGURATOR_VERSION_IS_DIFFERENT = /*$$(*/
"Configurator version is different than its configurator creator." /*)*/;

public static final String CONFIGURATOR_IS_NOT_ACTIVATED = /*$$(*/
"Configurator is not activated." /*)*/;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ public interface ConfiguratorCheckService {
void checkLinkedSaleOrderLine(Configurator configurator) throws AxelorException;

void checkHaveConfigurator(SaleOrder saleOrder) throws AxelorException;

boolean isConfiguratorVersionDifferent(Configurator configurator);

void checkConfiguratorActivated(Configurator configurator) throws AxelorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,25 @@ public void checkHaveConfigurator(SaleOrder saleOrder) throws AxelorException {
I18n.get(SaleExceptionMessage.SALE_ORDER_DO_NOT_HAVE_CONFIGURATOR));
}
}

@Override
public boolean isConfiguratorVersionDifferent(Configurator configurator) {

Objects.requireNonNull(configurator);

return !configurator
.getConfiguratorVersion()
.equals(configurator.getConfiguratorCreator().getConfiguratorVersion());
}

@Override
public void checkConfiguratorActivated(Configurator configurator) throws AxelorException {
if (configurator != null) {
if (!configurator.getConfiguratorCreator().getIsActive()) {
throw new AxelorException(
TraceBackRepository.CATEGORY_INCONSISTENCY,
I18n.get(SaleExceptionMessage.CONFIGURATOR_IS_NOT_ACTIVATED));
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.axelor.apps.sale.service.configurator;

import com.axelor.apps.base.AxelorException;
import com.axelor.apps.base.db.repo.TraceBackRepository;
import com.axelor.apps.base.service.exception.TraceBackService;
import com.axelor.apps.sale.db.Configurator;
import com.axelor.apps.sale.db.SaleOrder;
import com.axelor.apps.sale.db.SaleOrderLine;
import com.axelor.apps.sale.db.repo.ConfiguratorRepository;
import com.axelor.apps.sale.db.repo.SaleOrderLineRepository;
import com.axelor.apps.sale.db.repo.SaleOrderRepository;
import com.axelor.apps.sale.exception.SaleExceptionMessage;
import com.axelor.apps.sale.service.saleorder.SaleOrderComputeService;
import com.axelor.db.mapper.Mapper;
import com.axelor.i18n.I18n;
import com.axelor.rpc.Context;
import com.axelor.rpc.JsonContext;
import com.axelor.utils.helpers.json.JsonHelper;
Expand Down Expand Up @@ -66,6 +69,13 @@ protected SaleOrderLine duplicateLineWithoutCompute(SaleOrderLine saleOrderLine)
throws AxelorException, JsonProcessingException {
Objects.requireNonNull(saleOrderLine);
var configurator = saleOrderLine.getConfigurator();

if (configuratorCheckService.isConfiguratorVersionDifferent(configurator)) {
throw new AxelorException(
TraceBackRepository.CATEGORY_INCONSISTENCY,
I18n.get(SaleExceptionMessage.CONFIGURATOR_VERSION_IS_DIFFERENT));
}

var context = new Context(Configurator.class);

var saleOrder = saleOrderLine.getSaleOrder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,13 @@ public void fillProductFields(
Long saleOrderId)
throws AxelorException {

configuratorCheckService.checkConfiguratorActivated(configurator);
configuratorCheckService.checkLinkedSaleOrderLine(configurator, product);
if (configuratorCheckService.isConfiguratorVersionDifferent(configurator)) {
throw new AxelorException(
TraceBackRepository.CATEGORY_INCONSISTENCY,
I18n.get(SaleExceptionMessage.CONFIGURATOR_VERSION_IS_DIFFERENT));
}

addSpecialAttributeParentSaleOrderId(jsonAttributes, saleOrderId);

Expand Down Expand Up @@ -394,6 +400,7 @@ public SaleOrderLine generateSaleOrderLine(
JsonContext jsonAttributes,
JsonContext jsonIndicators)
throws AxelorException {
configuratorCheckService.checkConfiguratorActivated(configurator);
var newSaleOrderLine =
generateSaleOrderLine(configurator, jsonAttributes, jsonIndicators, saleOrder);
saleOrderLineRepository.save(newSaleOrderLine);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@ public interface ITranslation {
public static final String PRICING_CUSTOM_TITLE_PREVIOUS_PRICING = /*$$(*/
"Previous pricing"; /*)*/
public static final String PRICING_CUSTOM_TITLE_NEXT_PRICING = /*$$(*/ "Next pricing"; /*)*/
public static final String CONFIGURATOR_VERSION_IS_DIFFERENT =
/*$$(*/ "Configurator version is different than the version of its configurator creator, therefore only a simple duplicate will be created, proceed ?"; /*)*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.axelor.apps.sale.db.repo.SaleOrderLineRepository;
import com.axelor.apps.sale.exception.SaleExceptionMessage;
import com.axelor.apps.sale.service.cart.CartProductService;
import com.axelor.apps.sale.service.configurator.ConfiguratorCheckService;
import com.axelor.apps.sale.service.configurator.ConfiguratorSaleOrderDuplicateService;
import com.axelor.apps.sale.service.observer.SaleOrderLineFireService;
import com.axelor.apps.sale.service.saleorder.SaleOrderMarginService;
Expand All @@ -46,6 +47,7 @@
import com.axelor.apps.sale.service.saleorderline.view.SaleOrderLineDomainService;
import com.axelor.apps.sale.service.saleorderline.view.SaleOrderLineDummyService;
import com.axelor.apps.sale.service.saleorderline.view.SaleOrderLineViewService;
import com.axelor.apps.sale.translation.ITranslation;
import com.axelor.common.StringUtils;
import com.axelor.i18n.I18n;
import com.axelor.inject.Beans;
Expand Down Expand Up @@ -384,4 +386,32 @@ public void configuratorDuplicateSaleOrderLine(ActionRequest request, ActionResp
response.setReload(true);
}
}

@ErrorException
public void checkDuplicationSaleOrderLine(ActionRequest request, ActionResponse response)
throws AxelorException {
SaleOrderLine saleOrderLine = request.getContext().asType(SaleOrderLine.class);

Beans.get(ConfiguratorCheckService.class)
.checkConfiguratorActivated(saleOrderLine.getConfigurator());

if (Beans.get(ConfiguratorCheckService.class)
.isConfiguratorVersionDifferent(saleOrderLine.getConfigurator())) {
response.setAlert(I18n.get(ITranslation.CONFIGURATOR_VERSION_IS_DIFFERENT));
}
}

@ErrorException
public void checkEditConfiguratorSaleOrderLine(ActionRequest request, ActionResponse response)
throws AxelorException {
SaleOrderLine saleOrderLine = request.getContext().asType(SaleOrderLine.class);

Beans.get(ConfiguratorCheckService.class)
.checkConfiguratorActivated(saleOrderLine.getConfigurator());

if (Beans.get(ConfiguratorCheckService.class)
.isConfiguratorVersionDifferent(saleOrderLine.getConfigurator())) {
response.setError(I18n.get(SaleExceptionMessage.CONFIGURATOR_VERSION_IS_DIFFERENT));
}
}
}
2 changes: 2 additions & 0 deletions axelor-sale/src/main/resources/domains/Configurator.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
<string name="indicators" title="Indicators" json="true"/>
<one-to-one name="product" ref="com.axelor.apps.base.db.Product" title="Product"
unique="true"/>
<integer name="configuratorVersion" title="Version" nullable="true" readonly="true"
default="null"/>


<extra-code><![CDATA[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,14 @@

<boolean name="isActive" title="Is Active" default="false"/>
<boolean name="copyNeedingUpdate"/>
<integer name="configuratorVersion" title="Version" min="0" default="0" readonly="true"/>

<track>
<field name="configuratorVersion" on="UPDATE"/>
</track>

<entity-listener
class="com.axelor.apps.sale.db.repo.ConfiguratorCreatorListener"/>
</entity>

</domain-models>
4 changes: 4 additions & 0 deletions axelor-sale/src/main/resources/i18n/messages.csv
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@
"Configurator creator name",,,
"Configurator creators",,,
"Configurator formula list",,,
"Configurator is not activated.",,,
"Configurator model",,,
"Configurator version is different than its configurator creator.",,,
"Configurator version is different than the version of its configurator creator, therefore only a simple duplicate will be created, proceed ?",,,
"ConfiguratorCreator",,,
"ConfiguratorCreators",,,
"Configurators",,,
Expand Down Expand Up @@ -706,6 +709,7 @@
"Validity duration",,,
"Validity duration per default",,,
"Value",,,
"Version",,,
"Version Number",,,
"Version date",,,
"Version number",,,
Expand Down
4 changes: 4 additions & 0 deletions axelor-sale/src/main/resources/i18n/messages_en.csv
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@
"Configurator creator name",,,
"Configurator creators",,,
"Configurator formula list",,,
"Configurator is not activated.",,,
"Configurator model",,,
"Configurator version is different than its configurator creator.",,,
"Configurator version is different than the version of its configurator creator, therefore only a simple duplicate will be created, proceed ?",,,
"ConfiguratorCreator",,,
"ConfiguratorCreators",,,
"Configurators",,,
Expand Down Expand Up @@ -706,6 +709,7 @@
"Validity duration",,,
"Validity duration per default",,,
"Value",,,
"Version",,,
"Version Number",,,
"Version date",,,
"Version number",,,
Expand Down
4 changes: 4 additions & 0 deletions axelor-sale/src/main/resources/i18n/messages_fr.csv
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@
"Configurator creator name",,,
"Configurator creators",,,
"Configurator formula list","Liste des formules",,
"Configurator is not activated.","Le configurator n'est pas activé.",,
"Configurator model","Modèle de configurateur",,
"Configurator version is different than its configurator creator.","La version du configurateur est différente de celle de son modèle.",,
"Configurator version is different than the version of its configurator creator, therefore only a simple duplicate will be created, proceed ?","La version du configurateur est différente de celle de son modèle, une simple copie sera générer, confirmer ? ",,
"ConfiguratorCreator","Modèle de configurateur",,
"ConfiguratorCreators","Modèles de configurateur",,
"Configurators","Configurateurs",,
Expand Down Expand Up @@ -706,6 +709,7 @@
"Validity duration","Durée de validité",,
"Validity duration per default","Durée de validité par défaut",,
"Value","Valeur",,
"Version",,,
"Version Number","Numéro de version",,
"Version date","Date de version",,
"Version number","Numéro de version",,
Expand Down
3 changes: 3 additions & 0 deletions axelor-sale/src/main/resources/views/Configurator.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<field name="configuratorCreator" form-view="configurator-creator-form"
grid-view="configurator-creator-grid" onSelect="action-configurator-method-creator-domain"
onChange="action-configurator-group-creator-onchange"/>
<field name="configuratorVersion"/>
<field name="configuratorCreatorName"/>
<field name="attributes" colSpan="12"/>
</panel>
Expand Down Expand Up @@ -50,6 +51,7 @@
<field name="configuratorCreator" form-view="configurator-creator-form"
grid-view="configurator-creator-grid" onSelect="action-configurator-method-creator-domain"
onChange="action-configurator-group-creator-onchange"/>
<field name="configuratorVersion" readonly="true"/>
<field name="configuratorCreatorName"/>
<field name="attributes" colSpan="12"/>
</panel>
Expand Down Expand Up @@ -77,6 +79,7 @@
<panel name="configuratorPanel" hidden="true" colSpan="12">
<field name="configuratorCreator" readonly="true" showTitle="false" css="bold large"
canView="false"/>
<field name="configuratorVersion" readonly="true"/>
<button name="validateBtn" title="Validate and generate the line" colSpan="4"
colOffset="2" onClick="save,action-configurator-method-generate"/>
</panel>
Expand Down
2 changes: 2 additions & 0 deletions axelor-sale/src/main/resources/views/ConfiguratorCreator.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

<panel name="otherDetailsPanel">
<field name="name"/>
<field name="configuratorVersion" readonly="true"/>
<button name="configureBtn" title="Configure" showIf="id == null" onClick="save"/>
<panel-related name="attributesPanel" field="attributes" hideIf="id == null"
onChange="action-configurator-creator-record-desactivate,save,action-configurator-creator-method-update-attributes"
Expand Down Expand Up @@ -184,6 +185,7 @@

<action-record name="action-configurator-creator-record-desactivate"
model="com.axelor.apps.sale.db.ConfiguratorCreator">
<field name="configuratorVersion" expr="eval: configuratorVersion + 1" if="isActive"/>
<field name="isActive" expr="eval: false"/>
</action-record>

Expand Down
32 changes: 28 additions & 4 deletions axelor-sale/src/main/resources/views/SaleOrderLine.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
<field name="sequence" if="__config__.app.getApp('sale')?.isDisplaySaleOrderLineNumber"
width="51"/>
<button name="configuratorEditBtn"
onClick="save,action-sale-order-line-view-regenerate-line"
onClick="action-sale-order-line-group-on-configurator-edit"
if="__config__.app.getApp('sale')?.getEnableConfigurator()" readonlyIf="configurator == null"
icon="fa-pen-to-square"/>
<button name="configuratorDuplicateBtn"
onClick="save,action-sale-order-line-method-configurator-duplicate"
onClick="action-sale-order-line-group-on-configurator-duplicate"
if="__config__.app.getApp('sale')?.getEnableConfigurator()" readonlyIf="configurator == null"
icon="fa-copy"/>
<button name="addToCartBtn" title="Add to cart"
Expand Down Expand Up @@ -72,11 +72,11 @@
<field name="sequence" if="__config__.app.getApp('sale')?.isDisplaySaleOrderLineNumber"
width="51"/>
<button name="configuratorEditBtn"
onClick="save,action-sale-order-line-view-regenerate-line"
onClick="action-sale-order-line-group-on-configurator-edit"
if="__config__.app.getApp('sale')?.getEnableConfigurator()" readonlyIf="configurator == null"
icon="fa-pen-to-square"/>
<button name="configuratorDuplicateBtn"
onClick="save,action-sale-order-line-method-configurator-duplicate"
onClick="action-sale-order-line-group-on-configurator-duplicate"
if="__config__.app.getApp('sale')?.getEnableConfigurator()" readonlyIf="configurator == null"
icon="fa-copy"/>
<button name="addToCartBtn" title="Add to cart"
Expand Down Expand Up @@ -810,4 +810,28 @@
<call class="com.axelor.apps.sale.web.SaleOrderLineController"
method="configuratorDuplicateSaleOrderLine"/>
</action-method>

<action-method
name="action-sale-order-line-method-check-duplication-sale-order-line">
<call class="com.axelor.apps.sale.web.SaleOrderLineController"
method="checkDuplicationSaleOrderLine"/>
</action-method>

<action-group name="action-sale-order-line-group-on-configurator-duplicate">
<action name="save"/>
<action name="action-sale-order-line-method-check-duplication-sale-order-line"/>
<action name="action-sale-order-line-method-configurator-duplicate"/>
</action-group>

<action-group name="action-sale-order-line-group-on-configurator-edit">
<action name="save"/>
<action name="action-sale-order-line-method-check-edit-configurator-sale-order-line"/>
<action name="action-sale-order-line-view-regenerate-line"/>
</action-group>

<action-method
name="action-sale-order-line-method-check-edit-configurator-sale-order-line">
<call class="com.axelor.apps.sale.web.SaleOrderLineController"
method="checkEditConfiguratorSaleOrderLine"/>
</action-method>
</object-views>
Loading