get invoice id on return SO d365fo x++
get invoice id on return SO d365fo x++
Code:
[ExtensionOf(classStr(SalesCopying))]
final class SalesCopying_Class_Extension
{
protected void copyLine(SalesLine _salesLine, SalesLineCopyFromSource _salesLineCopyFromSource)
{
next copyLine(_salesLine, _salesLineCopyFromSource);
TmpFrmVirtual sourceline = _salesLineCopyFromSource.parmTmpFrmVirtualLine();
if (sourceline.TableNum == tableNum(CustInvoiceTrans) && _salesLine)
{
CustInvoiceTrans CustInvoiceTrans = CustInvoiceTrans::findRecId(sourceline.RecordNo);
ttsbegin;
_salesLine.selectForUpdate(true);
_salesLine.DSAInvoiceId = CustInvoiceTrans.InvoiceId;
_salesLine.update();
ttscommit;
}
}
}[ExtensionOf(formStr(SalesCopying))]
final class SalesCopying_Form_Extension
{
void writeTmpFrmVirtual(
TmpFrmVirtual _tmpFrmVirtual,
TableId _tableId,
RecId _recId,
Num _id,
LineNum _lineNum,
TransDate _transDate,
Qty _qty,
PdsCWInventQty _pdsCWQty)
{
if (_tableId == tablenum(CustInvoiceTrans))
{
CustInvoiceTrans CustInvoiceTrans = CustInvoiceTrans::findRecId(_recId);
_tmpFrmVirtual.DSAInvoiceId = CustInvoiceTrans.InvoiceId;
}
next writeTmpFrmVirtual(_tmpFrmVirtual, _tableId, _recId, _id, _lineNum, _transDate, _qty, _pdsCWQty);
}
}[ExtensionOf(tableStr(SalesLine))]
final class SalesLine_DSAqeesa_Table_Extension
{
public boolean validateWrite(boolean _skipCreditLimitCheck)
{
boolean ok = true;
DSA_FinancialDimensionsMandatory finDimMandatory;
Defaultdimensionview dimensionViewtoCheck;
DSADimensionSetup DimensionSetup;
ok = next validateWrite(_skipCreditLimitCheck);
//MA comment
//If record exsit and defined FinDim are not set
if(DSProposedCustomizations::isValid(DSProposedCustomization::MandatoryFinDim))
{
//if (this.RecId)
//{
//Commented by JS, 2024/09/18, Due to Change solution
//while select * from finDimMandatory
//{
// Name dimName;
// dimName = finDimMandatory.DimensionAttributeName;
// select * from dimensionViewtoCheck
// where dimensionViewtoCheck.DefaultDimension == this.DefaultDimension
// && dimensionViewtoCheck.Name == dimName;
// if(!dimensionViewtoCheck)
// {
// ok = checkFailed(strFmt("@DSALabel:DSA000265", dimName));
// }
//}
//Code by JS, 2024/09/18, Mandatory financial Dimension
if(this.RecId)
{
while
select DimensionSetup
where DimensionSetup.SalesOrder == NoYes::Yes
notexists join dimensionViewtoCheck
where dimensionViewtoCheck.DefaultDimension == this.DefaultDimension
&& dimensionViewtoCheck.Name == DimensionSetup.Name
{
checkFailed(strFmt("@DSALabel:DSA000265", DimensionSetup.Name));
ok = false;
}
}
//}
}
return ok;
}
public display real lineCostAmount()
{
return this.calcCostAmount(this.QtyOrdered);
}
public display real lineCostAmount2()
{
return (this.CostPrice * this.QtyOrdered);
}
public display DSAAllocationStatus getAllocationStatus()
{
DSAAllocationStatus allocationStatus;
SalesQty allocatedQty = this.movementReservPhysicalUnit();
if (this.SalesStatus == SalesStatus::Invoiced || this.SalesStatus == SalesStatus::Delivered || allocatedQty == this.SalesQty)
{
allocationStatus = DSAAllocationStatus::Allocated;
}
else if (allocatedQty > 0 && allocatedQty < this.SalesQty)
{
allocationStatus = DSAAllocationStatus::PartiallyAllocated;
}
else
{
allocationStatus = DSAAllocationStatus::NotAllocated;
}
return allocationStatus;
}
/*public display real lineCostPrice()
{
return this.calculateCostPrice(this.InventDimId);
}*/
public display real movementReservPhysicalUnit()
{
DSAInventTransView inventTransView;
real qty;
InventTableModule inventTableModule;
SalesLine salesLine;
//InventQtyReservPhysical totalReservedPhysicalQty ;
//if(this.SalesQty)
//{
// select * from inventTransView where inventTransView.ReferenceId == this.SalesId
// && inventTransView.ItemId == this.ItemId
// && inventTransView.InventTransId == this.InventTransId
// && inventTransView.StatusIssue == StatusIssue::ReservPhysical;
// select * from inventTableModule where inventTableModule.ItemId == this.ItemId;
// UnitOfMeasureConverter_Product unitConverter = UnitOfMeasureConverter_Product::construct();
// unitConverter.parmProduct(InventTable::find(this.ItemId,true).Product);
// unitConverter.parmFromUnitOfMeasure(UnitOfMeasure::unitOfMeasureIdBySymbol(this.SalesUnit));
// unitConverter.parmToUnitOfMeasure(UnitOfMeasure::unitOfMeasureIdBySymbol(inventTableModule.UnitId));
// unitConverter.parmRoundAbsoluteValue(NoYes::Yes);
// unitConverter.parmApplyRounding(NoYes::Yes);
// if (unitConverter.convertValue(1) != 0)
// {
// qty = abs((inventTransView.Qty) / (unitConverter.convertValue(1)));
// }
// else
// {
// //qty = abs(inventTransView.Qty);
// qty = 0;
// }
//}
qty = this.reservedPhysical();
return qty;
}
public display real ShortagePhysicalUnit()
{
//real qty;
//CustPackingSlipTrans custPackingSlipTrans;
/* // Rakay Shahid -4th October, 2023 - Implementing new solution for shortage qty
DSAInventTransView inventTransView;
InventTableModule inventTableModule;
SalesLine salesLine;
//InventQtyReservPhysical totalReservedPhysicalQty ;
if(this.SalesQty)
{
select * from inventTransView where inventTransView.ReferenceId == this.SalesId
&& inventTransView.ItemId == this.ItemId
&& inventTransView.InventTransId == this.InventTransId
&& inventTransView.StatusIssue == StatusIssue::ReservPhysical;
select * from inventTableModule where inventTableModule.ItemId == this.ItemId;
UnitOfMeasureConverter_Product unitConverter = UnitOfMeasureConverter_Product::construct();
unitConverter.parmProduct(InventTable::find(this.ItemId,true).Product);
unitConverter.parmFromUnitOfMeasure(UnitOfMeasure::unitOfMeasureIdBySymbol(this.SalesUnit));
unitConverter.parmToUnitOfMeasure(UnitOfMeasure::unitOfMeasureIdBySymbol(inventTableModule.UnitId));
unitConverter.parmRoundAbsoluteValue(NoYes::Yes);
unitConverter.parmApplyRounding(NoYes::Yes);
// info(strFmt("%1",unitConverter.convertValue(1)));
qty = (this.SalesQty) - ((abs(inventTransView.Qty)) / (unitConverter.convertValue(1)));
}
*/
//select sum(Qty) from custPackingSlipTrans
// where custPackingSlipTrans.InventTransId == this.InventTransId;
//if (custPackingSlipTrans.Qty)
//{
// qty = this.SalesQty - (this.reservedOnOrder() + this.reservedPhysical() + custPackingSlipTrans.Qty);
//}
//else
//{
// qty = this.SalesQty - (this.reservedOnOrder() + this.reservedPhysical());
//}
InventTransOrigin InventTransOrigin;
InventTrans InventTrans;
InventDim InventDim;
SELECT InventTransOrigin
where InventTransOrigin.InventTransId == this.InventTransId
&& InventTransOrigin.ReferenceId == this.SalesId
&& InventTransOrigin.ReferenceCategory == InventTransType::Sales
JOIN sum(Qty)
from InventTrans
where InventTransOrigin.RecId == InventTrans.InventTransOrigin
&& InventTrans.StatusIssue == StatusIssue::OnOrder;
return abs(InventTrans.Qty);
}
public void modifiedField(FieldId _fieldId)
{
next modifiedField(_fieldId);
switch(_fieldId)
{
case fieldNum(SalesLine, ItemId):
{
if(this.ItemId)
{
this.DSAItemUnitCost = this.DSAItemUnitCost();
}
break;
}
case fieldNum(SalesLine, SalesUnit):
{
this.DSAItemUnitCost = this.DSAItemUnitCost();
break;
}
}
}
private Amount DSAItemUnitCost()
{
InventSum InventSum = InventSum::find(this.ItemId, this.InventDimId);
UnitOfMeasureSymbol UnitOfMeasureSymbol = InventSum.inventUnitId(InventSum);
Amount Amount = this.mcrCalcMarginAlert();
if(UnitOfMeasureSymbol != this.SalesUnit)
{
real ConvertedQty = this.convertQty(1, this.SalesUnit, UnitOfMeasureSymbol, this.ItemId);
Amount = Amount * ConvertedQty;
}
return Amount;
}
public Real convertQty(Qty _qty, UnitOfMeasureSymbol _fromUnitId,UnitOfMeasureSymbol _ToUnitId, ItemId _itemId)
{
Real Qty;
try
{
Qty = UnitOfMeasureConverter::convert(_qty, UnitOfMeasure::unitOfMeasureIdBySymbol(_fromUnitId), UnitOfMeasure::unitOfMeasureIdBySymbol(_ToUnitId),NoYes::No,InventTable::itemProduct(_itemId),NoYes::No);
}
catch
{
Qty = 0;
}
return Qty;
}
private mcrMarginSalesParms getMarginSalesParms(InventDimId _inventDimId)
{
MCRMarginSalesParms mcrMarginSalesParms;
container mcrMarginCalcMapKey;
SalesLine salesLineMargin;
Map mcrMarginCalcMap;
mcrMarginCalcMap = new Map(Types::Container, Types::Class);
mcrMarginCalcMapKey = [this.ItemId, _inventDimId, this.CustAccount, this.SalesQty, DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone())];
if (mcrMarginCalcMap.exists(mcrMarginCalcMapKey))
{
mcrMarginSalesParms = mcrMarginCalcMap.lookup(mcrMarginCalcMapKey);
}
else
{
salesLineMargin = this.createMarginSalesLineBuffer(_inventDimId);
// Calculate margin
mcrMarginSalesParms = MCRMarginAlert_Simulation::calcMarginServer(salesLineMargin, DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
mcrMarginCalcMap.insert(mcrMarginCalcMapKey, mcrMarginSalesParms);
}
return mcrMarginSalesParms;
}
CostPrice mcrCalcMarginAlert()
{
InventDim _inventDim = this.inventDim();
InventDimId inventDimId;
MCRMarginSalesParms mcrMarginSalesParms;
SalesPrice unitSalesPrice;
CostPrice mcrCostPrice;
if (SalesParameters::find().MCREnableMarginAlert)
{
mcrMarginSalesParms = this.getMarginSalesParms(_inventDim.inventDimId);
mcrCostPrice = mcrMarginSalesParms.parmCostPrice();
}
return mcrCostPrice;
}
private SalesLine createMarginSalesLineBuffer(InventDimId _inventDimId)
{
SalesLine salesLineMargin;
CustTable selectedCustTable = CustTable::find(this.CustAccount);
// Fill a sales line buffer from datasources and trade agreement search
// From item
salesLineMargin.ItemId = this.ItemId;
salesLineMargin.InventDimId = _inventDimId;
salesLineMargin.QtyOrdered = this.SalesQty;
salesLineMargin.SalesQty = this.SalesQty;
salesLineMargin.SalesUnit = this.SalesUnit;
salesLineMargin.ShippingDateRequested = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
// From customer
salesLineMargin.CurrencyCode = selectedCustTable.Currency;
salesLineMargin.CustAccount = selectedCustTable.AccountNum;
// Pricing fields
salesLineMargin.LineAmount = this.LineAmount;
salesLineMargin.LineDisc = this.LineDisc;
salesLineMargin.LinePercent = this.LinePercent;
salesLineMargin.PriceUnit = this.PriceUnit;
salesLineMargin.SalesMarkup = this.SalesMarkup;
salesLineMargin.SalesPrice = this.SalesPrice;
return salesLineMargin;
}
/// <summary>
/// Initializes a <c>SalesLine</c> record from a <c>SalesCreateReleaseOrderLineTmp</c> record.
/// </summary>
/// <param name="_salesCreateReleaseOrderLineTmp">
/// The <c>SalesCreateReleaseOrderLineTmp</c> record from which to initialize the <c>SalesLine</c>
/// record.
/// </param>
public void initFromSalesCreateReleaseOrderLineTmp(SalesCreateReleaseOrderLineTmp _salesCreateReleaseOrderLineTmp)
{
next initFromSalesCreateReleaseOrderLineTmp(_salesCreateReleaseOrderLineTmp);
this.DSAItemUnitCost = _salesCreateReleaseOrderLineTmp.DSAItemUnitCost;
}
public display String50 configId()
{
return this.inventDim().configId;
}
public display String50 styleId()
{
return this.inventDim().InventStyleId;
}
static void modifyExpectedRetQty(SalesLine _salesLine,
InventDim _inventDim,
boolean _resetPrice)
{
_resetPrice = false;
next modifyExpectedRetQty(_salesLine, _inventDim, _resetPrice);
}
protected void initFromTmpFrmVirtual(
SalesTable _salesTable,
TmpFrmVirtual _tmpFrmVirtual,
ModuleInventPurchSales _moduleInventPurchSales)
{
this.DSAInvoiceId = _tmpFrmVirtual.DSAInvoiceId;
next initFromTmpFrmVirtual(_salesTable, _tmpFrmVirtual, _moduleInventPurchSales);
}
}
Comments
Post a Comment