Table of Contents

AIRS-1432 Add "brexit" and "UX dimension" validation for M2M and upload

AIRS-1432 Add "brexit" and "UX dimension" validation for M2M and upload → Jira

Spec im Confluence

Spezifikation

Kurzbeschreibung mit eigenen Worten

Abhängig vom Flag (CustomsRequired bzw. UXDimensionRequired) in der DA zugrundeliegenden Nachricht (PO oder VMI) müssen bestimmte Felder beim Import / Upload geprüft werden. Wenn das Flag auf true steht, müssen die Felder gefüllt sein.

Bei UX Dimensions müssen nicht immer alle Felder Pflichtfelder sein, sondern man muss schauen wie das Feld konfiguriert ist. Der Code kann sich wahrscheinlich an den von der UI anlehnen.

Zusätzlich muss geprüft werden:

Außerdem müssen die eingehenden(?) CSVs und XMLs bei PO und VMI Demand das Feld “CustomsRequired” enthalten.

CSV Upload Spec ist in dem Task AIRS-1474 enthalten:
https://tasks.supplyon.de/secure/attachment/26880/SD_AirSupply_Interfaces_DA_V_9.3.xlsx

Fragen an Saskia

TODO

Original

Hints:

Attention: mandatory fields for UX dimensions (fields above marked in blue) may vary depending on the customer configuration in the TAIRFIELDCONFIG. This has to be considered for the validation

Misc

Tests reparieren

Folgende Tests wurden von meinen Änderungen betroffen und müssen nun repariert werden:

Default UoMs

Set proper UoMs after validation

Nachdem die ASN importiert und validiert wurde, sollte man die richtige (interne!) UoMs setzen. Davor muss aber geprüft werden, ob vom alten Code wirklich interne UoMs verwendet werden.

Hilfreich:

BigDecimal uxWeightInXML = XMLToolbox.getSubTagValueAsBigDecimal(uxElement, ASNXMLConstants.TAG_UX_GROSSWEIGHT, null);
WeightUtil.UOM_CONVERTER_UNITS_WEIGHT targetWeightUoM = WeightUtil.UOM_CONVERTER_UNITS_WEIGHT.getUOMConverterUnit(uxModel.getUXWeightUOM());
uxModel.setGrossWeight(DimensionsUtil.convertFromUIToModel(targetWeightUoM.name(), uxWeightInXML));
Check if it works for "non UX Dimensions" situations

Im ASNXMLImportHandler:

        // TODO: check if it works for "non UX Dimensions" situations!
//        uxModel.setUXWeightUOM(WeightUtil.INTERNAL_GLOBAL_WEIGHT_UOM);
//        uxModel.setDimensionsUom(DimensionsUtil.INTERNAL_GLOBAL_DEFAULT_LENGTH_UOM);

…

CSV Upload

Wichtige Klassen:

Änderungen, die ich machen musste

Nützliche SQL Befehle

-- Flags abfragen
SELECT t.CCUSTOMSDECLARATIONREQUIRED, t.CPACKDETAILSREQUIRED, t.* FROM TAIRDEMANDS t WHERE CHEADERID=18168;
 
-- Flags bei der Demand, die ich verwende, setzen
UPDATE TAIRDEMANDS SET CCUSTOMSDECLARATIONREQUIRED=1, CPACKDETAILSREQUIRED=1 WHERE CHEADERID=18168;
 
-- Flag CENABLEUXDIMENSIONS bei dem Profile 1 setzen
UPDATE TCPPROFILES_SCD SET CENABLEUXDIMENSIONS=0 WHERE cProfileId=1;
 
-- Misc
SELECT t.CPROFILEID, t.* FROM TCONTROLPOINT_SCD t WHERE cCPId=101883;
 
SELECT t.CPROFILEID, t.* FROM TCPPROFILES_SCD t;

Misc

Die Felder, die für die Validierung von UXs notwendig sind werden in ASNValidations.getUxMandatoryFields() hinzugefügt.

Die Felder, die für die Validierung von UEs notwendig sind werden in ASNValidations.getUEMandatoryFields() hinzugefügt.

Gewicht UoMs

Die Gewichte der UXs werden momentan “nicht konsequent” berechnet. Um dies zu korrigieren am besten die Verwendungen von UXModel.setUXWeightUOM() und UXModel.setGrossWeightUom() anschauen (z.B. auch die Verwendung von ASNWeightModel.setWeightUoM()).

Merge 20190206

default_xx.properties

# Für AIRS-1472:

airsupply.asn.csv.error.uxlengthuom=$$P$$Empty or invalid UoM for UX length in line %s1, position %s2.
airsupply.asn.csv.error.uxheightuom=$$P$$Empty or invalid UoM for UX height in line %s1, position %s2.
airsupply.asn.csv.error.uxwidthuom=$$P$$Empty or invalid UoM for UX width in line %s1, position %s2.
airsupply.asn.csv.error.uxgrossweightuom=$$P$$Empty or invalid UoM for UX gross weight in line %s1, position %s2.
airsupply.asn.csv.error.uenetweightuom=$$P$$Empty or invalid UoM for UE net weight in line %s1, position %s2.
airsupply.asn.validation.business.c450.9=$$P$$C450.9 - CUST.MATNR\: %s7 /PO/VMI REF, ITEM, PO SL\: %s4 , %s5 , %s6 /UE\: %s3 /UX\: %s2 /DA ID\: %s1 - Net weight UoM is missing. As the flag for 'Customs Declaration Required' is set to TRUE in the Customer PO this value has to be declared in the associated UE.


# Für AIRS-

airsupply.asn.ue.column.netweight.withoutuom=$$P$$Net weight
airsupply.asn.ue.column.netweightuom=$$P$$Net weight UoM

airsupply.asn.uxdimensions.column.weightuom=$$P$$Weight UoM


# Für AIRS-1532 Enhance DA full download

uoms.in=$$P$$in
uoms.ft=$$P$$ft
uoms.mm=$$P$$mm
uoms.cm=$$P$$cm
uoms.m=$$P$$m
uoms.kg=$$P$$kg
uoms.lb=$$P$$lb

SQL (es hat sich herausgestellt, dass dieses Skript nicht notwendig ist, da GrossWeightUoM ein “virtuelles” Feld ist, das nur für Import und CSV Upload notwendig ist):

INSERT INTO TAIRFIELDCONFIG ( CCUSTOMERCPID, CCUSTOMERCPPROFILEID, CPROCESS, CFIELDNAME, CMANDATORY, CDISPLAYABLE, CDEFAULTDISPLAY, CSORTING, CPROCESSTRANSFER, CFORMATPATTERN, CEDITABLE )
SELECT '-1000','-1','DA-UXDimensions','GrossWeightUom','1','1','1','11','0',NULL,'1' FROM DUAL
WHERE NOT EXISTS ( SELECT * FROM TAIRFIELDCONFIG WHERE CCUSTOMERCPID=-1000 AND CCUSTOMERCPPROFILEID=-1 AND cProcess='DA-UXDimensions' AND cFieldName = 'GrossWeightUom');

PI5 Sprint 2 TODO

UoMs

Die UoMs berücksichtigen:

Tickets

Misc

Der folgende Code wurde von mir geschrieben, wird aber nicht mehr verwendet, da jetzt immer Zentimeter und Kilogramm bei den Brexit Feldern als UoMs verwendet werden.

// the same utility method is used on the UI too
String grossWeightUom = ASNWebUtil.getWeightUoM(sasUserContext, asnModel);
WeightConverter converter = new WeightConverter.Builder()
                .setSourceUom(WeightUtil.INTERNAL_GLOBAL_WEIGHT_UOM)
                .setTargetUom(WeightUtil.getUnitOfMeasure(grossWeightUom)).build();
BigDecimal converted = converter.convertAndRound(uxModel.getGrossWeight());
csvModel.setGrossWeight(converted);
 
 
String translatedDimensionsUom = DimensionsUtil.getTranslatedUserDimensionUom(asnModel.getCustomerCPId(), sasUserContext);
csvModel.setLength(DimensionsUtil.convertFromModelToUi(sasUserContext, asnModel.getCustomerCPId(), uxModel.getLength()));
csvModel.setLengthUom(translatedDimensionsUom);
csvModel.setWidth(DimensionsUtil.convertFromModelToUi(sasUserContext, asnModel.getCustomerCPId(), uxModel.getWidth()));
csvModel.setWidthUom(translatedDimensionsUom);
csvModel.setHeight(DimensionsUtil.convertFromModelToUi(sasUserContext, asnModel.getCustomerCPId(), uxModel.getHeight()));
csvModel.setHeightUom(translatedDimensionsUom);