Charges creation before sales invoice posting
/// <summary>
///
/// </summary>
[ExtensionOf(classStr(SalesInvoiceJournalCreate))]
final class SalesInvoiceJournalCreate_Extension
{
public void run()
{
SalesParmTable salesParmTable;
SalesParmUpdate salesParmUpdate;
CustParameters custParameters = CustParameters::find();
if (custParameters.AdvanceStampDutyManagement_Custom)
{
SalesTotals salesTotals;
TmpTaxWorkTrans tmpTaxWorkTrans;
MarkupTrans markupTrans;
SalesTable salesTableLoc;
salesParmTable = this.parmParmTable() as SalesParmTable;
salesParmUpdate = this.parmParmUpdate() as SalesParmUpdate;
salesTableLoc = salesParmTable.salesTable();
ttsbegin;
delete_from markupTrans
where markupTrans.TransTableId == salesTableLoc.TableId &&
markupTrans.TransRecId == salesTableLoc.RecId &&
markupTrans.CreatedForCharges_custom == NoYes::Yes;
ttscommit;
salesTotals = SalesTotals::construct(salesParmTable, salesParmUpdate.SpecQty, salesParmUpdate.SumBy, salesParmUpdate.ParmId, salesParmUpdate.SumSalesId, documentStatus);
salesTotals.calc();
tmpTaxWorkTrans = salesTotals.tax().tmpTaxWorkTrans();
StampChargesForInvoice_Custom::createCharges(salesTableLoc, salesParmTable, tmpTaxWorkTrans);
}
next run();
}
}
---------------------------------------------------------------------------------------------------------------------------
/// <summary>
///
/// </summary>
internal class StampChargesForInvoice_Custom
{
/// <summary>
///
/// </summary>
/// <param name = "_salesTable"></param>
/// <param name = "_salesParmTable"></param>
/// <param name = "_tmpTaxWorkTrans"></param>
public static void createCharges(SalesTable _salesTable, SalesParmTable _salesParmTable, TmpTaxWorkTrans _tmpTaxWorkTrans)
{
MarkupTrans markupTrans;
MarkupTable markupTable;
CustParameters custParameters = CustParameters::find();
TaxTable taxTable;
TmpTaxWorkTrans tmpTaxWorkTransLoc = _tmpTaxWorkTrans;
real totalLineAmount = 0;
boolean flag = false;
select firstonly RecId from taxtable
exists join _tmpTaxWorkTrans
where taxtable.IsApplicableStampDuty_Custom == NoYes::No &&
taxtable.TaxCode == _tmpTaxWorkTrans.TaxCode;
if (taxTable.RecId)
{
return;
}
select sum(SourceBaseAmountCur), sum(TaxAmountCur) from _tmpTaxWorkTrans;
if (abs(_tmpTaxWorkTrans.SourceBaseAmountCur) < custParameters.InvoicewithCharges_Custom)
{
return;
}
while select tmpTaxWorkTransLoc
where tmpTaxWorkTransLoc.TaxAmountCur == 0
join taxTable
where taxTable.TaxCode == tmpTaxWorkTransLoc.TaxCode &&
taxTable.IsApplicableStampDuty_custom == NoYes::Yes
{
flag = true;
totalLineAmount += abs(tmpTaxWorkTransLoc.SourceBaseAmountCur);
if (totalLineAmount >= custParameters.InvoiceWithStampDutyAmount_custom)
break;
}
if ((totalLineAmount < custParameters.InvoiceWithStampDutyAmount_custom) || !flag)
return;
select firstonly markupTable
where markupTable.MarkupCode == custParameters.MarkupCodeStampDuty_Custom;
markupTrans.clear();
markupTrans.TransTableId = _salesTable.TableId;
markupTrans.TransRecId = _salesTable.RecId;
markupTrans.initValue();
markupTrans.initFromMarkupTable(markupTable);
markupTrans.initFromSalesTable(_salesTable);
markupTrans.ModuleCategory = HeadingLine::Heading;
markupTrans.MarkupCategory = MarkupCategory::Fixed;
markupTrans.Keep = NoYes::No;
markupTrans.CurrencyCode = _salesTable.CurrencyCode;
markupTrans.Value = custParameters.StampAmount_Custom;
markupTrans.CreatedForStampChargesInvoice_Custom = NoYes::Yes;
markupTrans.insert();
}
Comments
Post a Comment