protected static FR_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5BL_SBPVBT_1153 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_Bool(); //Put your code here foreach (var position in Parameter.BillPositions) { var billPosition = new CL1_BIL.ORM_BIL_BillPosition(); billPosition.Load(Connection, Transaction, position.BillPositionID); if (billPosition != null) { billPosition.PositionPricePerUnitValue_BeforeTax = position.ChangedPrice; billPosition.PositionValue_BeforeTax = position.ChangedPrice * billPosition.Quantity; var tax = CL1_ACC_TAX.ORM_ACC_TAX_Tax.Query.Search(Connection, Transaction, new CL1_ACC_TAX.ORM_ACC_TAX_Tax.Query { ACC_TAX_TaxeID = billPosition.ApplicableSalesTax_RefID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).SingleOrDefault(); if (tax != null) { billPosition.PositionPricePerUnitValue_IncludingTax = MoneyUtils.CalculateGrossPriceForTaxInPercent(position.ChangedPrice, (decimal)tax.TaxRate); billPosition.PositionValue_IncludingTax = billPosition.PositionPricePerUnitValue_IncludingTax * billPosition.Quantity; } billPosition.Save(Connection, Transaction); var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, billPosition.BIL_BilHeader_RefID); var allPositionsForHeader = CL5_APOBilling_Bill.Complex.Retrieval.cls_Get_BillPositions_with_Articles_for_BillHeader.Invoke(Connection, Transaction, new P_L5BL_GBPwAfBH_1848 { BillHeaderID = billHeader.BIL_BillHeaderID }, securityTicket).Result; var billSumIncludeTax = allPositionsForHeader.Sum(x => x.BillPosition.PositionValue_IncludingTax); var billSumBeforeTax = allPositionsForHeader.Sum(x => x.BillPosition.PositionValue_BeforeTax); billHeader.TotalValue_BeforeTax = billSumBeforeTax; billHeader.TotalValue_IncludingTax = billSumIncludeTax; billHeader.Save(Connection, Transaction); } } return(returnValue); #endregion UserCode }
protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5BL_CBP_1330 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_Guid(); var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); foreach (var item in Parameter.BillPositionIDs) { // Retrieve Bill Position var billPosition = new CL1_BIL.ORM_BIL_BillPosition(); billPosition.Load(Connection, Transaction, item); // Delete relationship between Bill Positions and Shipment Positions in Assignment table. CL1_BIL.ORM_BIL_BillPosition_2_ShipmentPosition.Query.SoftDelete(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition_2_ShipmentPosition.Query { BIL_BillPosition_RefID = billPosition.BIL_BillPositionID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query.SoftDelete(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query { BIL_BillPosition_RefID = billPosition.BIL_BillPositionID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); // Delete bill position billPosition.IsDeleted = true; billPosition.Save(Connection, Transaction); // Substract values for bill header billHeader.TotalValue_BeforeTax -= billPosition.PositionValue_BeforeTax; billHeader.TotalValue_IncludingTax -= billPosition.PositionValue_IncludingTax; } billHeader.Save(Connection, Transaction); returnValue.Status = FR_Status.Success; return(returnValue); #endregion UserCode }
protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L5BL_CBPfCRP_1631 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_Guid(); //Put your code here // shipped status for tenant var statusParam = new CL5_APOBilling_Shipment.Atomic.Retrieval.P_L5SH_GSSfGPMaT_1700 { GlobalPropertyMatchingID = DLCore_DBCommons.Utils.EnumUtils.GetEnumDescription(DLCore_DBCommons.APODemand.EShipmentStatus.Shipped) }; var statusResult = CL5_APOBilling_Shipment.Atomic.Retrieval.cls_Get_Shipment_Status_for_GlobalPropertyMatchingID_and_TenantID.Invoke(Connection, Transaction, statusParam, securityTicket).Result; // Get bill positions for header ID var parameterBillPosition = new CL5_APOBilling_Bill.Atomic.Retrieval.P_L5BL_GBPfBH_1534(); parameterBillPosition.BillHeaderID = Parameter.BillHeaderID; parameterBillPosition.ShipmentStatusID = statusResult.LOG_SHP_Shipment_StatusID; var alreadyAddedBillPositions = CL5_APOBilling_Bill.Atomic.Retrieval.cls_Get_BillPositions_for_BillHeader.Invoke(Connection, Transaction, parameterBillPosition, securityTicket).Result; // It must be the same RecipientBusinessParticipant_RefID for all bill positions on one header. if (alreadyAddedBillPositions.Select(x => x.RecipientBusinessParticipant_RefID).Distinct().ToList().Count > 1) { throw new ArgumentException(string.Format("There are duplicates for RecipientBusinessParticipant_RefID in database. BillHeaderID={1}", Parameter.BillHeaderID)); } Guid recipientBusinessParticipantID = alreadyAddedBillPositions.Select(x => x.RecipientBusinessParticipant_RefID).Distinct().SingleOrDefault(); var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); int positionCounter = 0; foreach (var id in Parameter.CustomerOrderReturnPositions) { #region Find CustomerOrderReturnPosition //Find return position var customerReturnPosition = new CL1_ORD_CUO.ORM_ORD_CUO_CustomerOrderReturn_Position(); customerReturnPosition.Load(Connection, Transaction, id); //Check if Position is good if (customerReturnPosition == null || customerReturnPosition.ORD_CUO_CustomerOrderReturn_PositionID == Guid.Empty) { continue; } #endregion #region Find Product and Taxes // Find Product var product = new CL1_CMN_PRO.ORM_CMN_PRO_Product(); product.Load(Connection, Transaction, customerReturnPosition.CMN_PRO_Product_RefID); // Find taxes var productTax = CL1_CMN_PRO.ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query.Search(Connection, Transaction, new CL1_CMN_PRO.ORM_CMN_PRO_Product_SalesTaxAssignmnet.Query { Product_RefID = product.CMN_PRO_ProductID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).FirstOrDefault(); var tax = new CL1_ACC_TAX.ORM_ACC_TAX_Tax(); if (productTax != null) { tax.Load(Connection, Transaction, productTax.ApplicableSalesTax_RefID); } else { tax = null; } #endregion #region Find Bill Header and CustomerReturnHeader var customerReturnHeader = new CL1_ORD_CUO.ORM_ORD_CUO_CustomerOrderReturn_Header(); customerReturnHeader.Load(Connection, Transaction, customerReturnPosition.CustomerOrderReturnHeader_RefID); #region Check Bill Header status // Get status for bill header var statusCreated = CL1_BIL.ORM_BIL_BillStatus.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillStatus.Query { GlobalPropertyMatchingID = DLCore_DBCommons.Utils.EnumUtils.GetEnumDescription(DLCore_DBCommons.APODemand.EBillStatus.Created), Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).Single(); // Check current bill header status var billHeaderStatuses = CL1_BIL.ORM_BIL_BillHeader_2_BillStatus.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillHeader_2_BillStatus.Query { BIL_BillHeader_RefID = billHeader.BIL_BillHeaderID, IsCurrentStatus = true, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); var billHeaderStatusesExists = billHeaderStatuses.Any(x => x.BIL_BillStatus_RefID == statusCreated.BIL_BillStatusID); // Throw exception if bill doesn't have a good status if (!billHeaderStatusesExists) { throw new Exception("Bill header doesn't have created status!"); } #endregion #region Check does current bill position have the same customer // Check does current bill position have the same customer ORM_CMN_BPT_CTM_Customer.Query customerQuery = new CL1_CMN_BPT_CTM.ORM_CMN_BPT_CTM_Customer.Query(); customerQuery.IsDeleted = false; customerQuery.Tenant_RefID = securityTicket.TenantID; customerQuery.CMN_BPT_CTM_CustomerID = customerReturnHeader.Customer_RefID; var customer = ORM_CMN_BPT_CTM_Customer.Query.Search(Connection, Transaction, customerQuery).FirstOrDefault(); if (recipientBusinessParticipantID == Guid.Empty) { recipientBusinessParticipantID = customer.Ext_BusinessParticipant_RefID; } else { if (recipientBusinessParticipantID != customer.Ext_BusinessParticipant_RefID) { throw new ArgumentException("All Shipment positions must have the same RecipientBusinessParticipant_RefID"); } } #endregion #region Check does exist bill position for current order position bool exist = CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query.Exists(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query { ORD_CUO_CustomerOrderReturn_Position_RefID = customerReturnPosition.ORD_CUO_CustomerOrderReturn_PositionID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false } ); if (exist) { throw new ArgumentException("There is already Bill position for some Shipment position"); } #endregion #region Create Bill Position // Create Bill position for Customer order position var billPosition = new CL1_BIL.ORM_BIL_BillPosition(); billPosition.BIL_BilHeader_RefID = billHeader.BIL_BillHeaderID; billPosition.BIL_BillPosition_Group_RefID = Guid.Empty; billPosition.ApplicableSalesTax_RefID = (tax != null ? tax.ACC_TAX_TaxeID : Guid.Empty); billPosition.PositionNumber = string.Empty; billPosition.BillPosition_Description = string.Empty; billPosition.BillPosition_Comment = string.Empty; billPosition.PositionIndex = positionCounter++; billPosition.PositionPricePerUnitValue_BeforeTax = Convert.ToDecimal(customerReturnPosition.Position_ValuePerUnit); billPosition.PositionPricePerUnitValue_IncludingTax = DLUtils_Common.Calculations.MoneyUtils.CalculateGrossPriceForTaxInPercent(billPosition.PositionPricePerUnitValue_BeforeTax, Convert.ToDecimal(tax == null ? 0 : tax.TaxRate)); billPosition.PositionValue_BeforeTax = billPosition.PositionPricePerUnitValue_BeforeTax * (decimal)customerReturnPosition.Position_Quantity; billPosition.PositionValue_IncludingTax = billPosition.PositionPricePerUnitValue_IncludingTax * (decimal)customerReturnPosition.Position_Quantity; billPosition.BillPosition_ProductNumber = product.Product_Number; billPosition.Quantity = (decimal)customerReturnPosition.Position_Quantity; billPosition.Tenant_RefID = securityTicket.TenantID; billPosition.Creation_Timestamp = DateTime.Now; billPosition.Save(Connection, Transaction); // Create relationship between Bill position and customer order return position var billPosition2returnPosition = new CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition(); billPosition2returnPosition.BIL_BillPosition_RefID = billPosition.BIL_BillPositionID; billPosition2returnPosition.ORD_CUO_CustomerOrderReturn_Position_RefID = id; billPosition2returnPosition.AssignmentID = Guid.NewGuid(); billPosition2returnPosition.Creation_Timestamp = DateTime.Now; billPosition2returnPosition.Tenant_RefID = securityTicket.TenantID; billPosition2returnPosition.Save(Connection, Transaction); #endregion //Change Bill Header total values billHeader.TotalValue_BeforeTax = alreadyAddedBillPositions.Sum(x => x.PositionValue_BeforeTax) + billPosition.PositionValue_BeforeTax; billHeader.TotalValue_IncludingTax = alreadyAddedBillPositions.Sum(x => x.PositionValue_IncludingTax) + billPosition.PositionValue_IncludingTax; #endregion } //Save Bill Header with new total values billHeader.Save(Connection, Transaction); return(returnValue); #endregion UserCode }
protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L3PY_CPfB_1506 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_Guid(); /* * 0. Get current fiscal year * 1. Get current's account business participant * 2. Get booking accounts for bill's revenue participant and debtor participant * 3. Find unpayed amount for bill * 4. Create accounting transaction with booking lines * 5. Create new bill header assigned payment entry and assign accunting transaction to installments * 6. Update dunning process if needed */ #region 0. Load current fiscal year Guid currentFiscalYearID = CL2_FiscalYear.Complex.Retrieval.cls_Get_Current_FiscalYear.Invoke(Connection, Transaction, securityTicket).Result.ACC_FiscalYearID; #endregion #region 1. Get current's account business participant Guid accountBPID = CL1_USR.ORM_USR_Account.Query.Search(Connection, Transaction, new CL1_USR.ORM_USR_Account.Query { USR_AccountID = securityTicket.AccountID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).Single().BusinessParticipant_RefID; #endregion #region 2. Get booking accounts for bill's revenue participant and debtor participant var param = new CL3_Payments.Complex.Retrieval.P_L3PY_GBAfBP_1521 { FiscalYearID = currentFiscalYearID, BillHeaderID = Parameter.BillHeaderID }; var billDataWithBookingAccounts = CL3_Payments.Complex.Retrieval.cls_Get_Booking_Accounts_for_Bill_Participants.Invoke(Connection, Transaction, param, securityTicket).Result; #endregion #region 3. Find unpayed amount for bill var payedParam = new CL3_Payments.Atomic.Retrieval.P_L3PY_GPAfB_1312 { BillHeaderID_List = new Guid[] { Parameter.BillHeaderID } }; var payed = CL3_Payments.Atomic.Retrieval.cls_Get_Payed_Amount_for_Bills.Invoke(Connection, Transaction, payedParam, securityTicket).Result; decimal amountLeftToBePayed = billDataWithBookingAccounts.Bill.TotalValuee_with_DunningFees_IncludingTax - payed.Single(x => x.BillHeaderID == Parameter.BillHeaderID).TotalPayedValue; // check if amount left to be payed is zero or if the amount for the current payment is larger than amount that is left to pay and send error status if (Decimal.Compare(amountLeftToBePayed, Decimal.Zero) == 0) { throw new Exception("Amount left to be payed is zero."); } else if (Decimal.Compare((amountLeftToBePayed - Parameter.Amount), Decimal.Zero) < 0) { throw new Exception("Amount for the current payment is larger than amount that is left to pay for this bill"); } #endregion #region 4. Create accounting transaction with booking lines var transactionParam = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315 { AccountingTransactionTypeID = Guid.Empty, CurrencyID = billDataWithBookingAccounts.Bill.CurrencyID, DateOfTransaction = Parameter.PaymentDate }; var bookingLines = new List <CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a>(); CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a bookingLine = null; #region Customer Account booking line bookingLine = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a(); bookingLine.BookingAccountID = billDataWithBookingAccounts.CustomerAccount.BookingAccountID; // Debtor account: Arrived amount is booked with positive sign bookingLine.TransactionValue = Parameter.Amount; bookingLines.Add(bookingLine); #endregion Guid tenantBPID = CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query { IfTenant_Tenant_RefID = securityTicket.TenantID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).Single().CMN_BPT_BusinessParticipantID; var bankAccountParam = new CL3_BookingAccounts.Atomic.Retrieval.P_L3BA_GBAPBPAfBP_1717 { BusinessParticipantID_List = new Guid[] { tenantBPID }, FiscalYearID = currentFiscalYearID, IsBankAccount = true }; var bankAccount = CL3_BookingAccounts.Atomic.Retrieval.cls_Get_BookingAccount_Purpose_BPAssignment_for_BPID_List.Invoke( Connection, Transaction, bankAccountParam, securityTicket).Result.SingleOrDefault(); if (bankAccount != null) { #region Tenant's Bank Account booking line bookingLine = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a(); bookingLine.BookingAccountID = bankAccount.BookingAccount_RefID; // On the tenants bank account the arrived amount is booked with negative sign bookingLine.TransactionValue = -1 * Parameter.Amount; bookingLines.Add(bookingLine); #endregion transactionParam.BookingLines = bookingLines.ToArray(); Guid accountTransactionID = CL3_BookingAccounts.Complex.Manipulation.cls_Create_Accounting_Transaction_with_BookingLines.Invoke( Connection, Transaction, transactionParam, securityTicket).Result; #endregion #region 5. Create new bill header assigned payment entry and assign accunting transaction to installments bool isFullyPaid = Decimal.Compare((amountLeftToBePayed - Parameter.Amount), Decimal.Zero) == 0; // if the whole bill is payed before -- stop if (Decimal.Compare(amountLeftToBePayed, Decimal.Zero) == 0) { return(returnValue); } // if this transaction will pay the rest of the bill set flag on the bill else if (isFullyPaid) { var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); billHeader.IsFullyPaid = true; billHeader.Save(Connection, Transaction); } var assignParam = new P_L3PY_AATtB_1107 { AccountTransactionID = accountTransactionID, AssignedAmount = Parameter.Amount, BillHeaderID = Parameter.BillHeaderID, PaymentDate = Parameter.PaymentDate }; cls_Assign_AccountingTransaction_to_Bill.Invoke(Connection, Transaction, assignParam, securityTicket); #region Load taxes and bill positions for taxes per position var billPositions = CL1_BIL.ORM_BIL_BillPosition.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition.Query { BIL_BilHeader_RefID = Parameter.BillHeaderID }); Guid[] applicableTaxes = billPositions.Select(x => x.ApplicableSalesTax_RefID).Distinct().ToArray(); var revenueAccountsParam = new CL3_BookingAccounts.Atomic.Retrieval.P_L3BA_GAfTaFY_1647 { FiscalYearID = currentFiscalYearID, TaxID = applicableTaxes, IsTaxAccount = false, IsRevenueAccount = true }; var revenueAccountAssignments = CL3_BookingAccounts.Atomic.Retrieval.cls_Get_Assignment_for_TaxID_List_and_FiscalYearID.Invoke( Connection, Transaction, revenueAccountsParam, securityTicket).Result; #endregion var balanceParam = new P_L3PY_CBCfAT_1329 { AccountingTransactionID = accountTransactionID, BookingAccountID = bankAccount.BookingAccount_RefID, Amount = Parameter.Amount }; cls_Create_BalanceChange_for_AccountingTransaction.Invoke(Connection, Transaction, balanceParam, securityTicket); #endregion #region 6. Update dunning process if needed var dunningProcessMemberBill = CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess_MemberBill.Query.Search(Connection, Transaction, new CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess_MemberBill.Query { BIL_BillHeader_RefID = Parameter.BillHeaderID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).SingleOrDefault(); if (dunningProcessMemberBill != null) { dunningProcessMemberBill.CurrentUnpaidBillFraction = amountLeftToBePayed; dunningProcessMemberBill.Save(Connection, Transaction); var dunningProcess = CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess.Query.Search(Connection, Transaction, new CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess.Query { ACC_DUN_DunningProcessID = dunningProcessMemberBill.ACC_DUN_DunningProcess_RefID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).Single(); if (isFullyPaid) { dunningProcess.IsDunningProcessClosed = true; dunningProcess.DunningProcessClosedAt_Date = DateTime.Now; dunningProcess.DunningProcessClosedBy_BusinessParticipnant_RefID = accountBPID; dunningProcess.Save(Connection, Transaction); } } } #endregion return(returnValue); #endregion UserCode }
protected static FR_L3PY_GBAfBP_1521 Execute(DbConnection Connection, DbTransaction Transaction, P_L3PY_GBAfBP_1521 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_L3PY_GBAfBP_1521(); #region Load customer's account (debtor) -- from BillRecepient_BPID var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); // Customer's BusinessParticipant ID Guid customerBPID = billHeader.BillRecipient_BuisnessParticipant_RefID; // Current tenant's BusinessParticipant ID var tenantBPID = CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query { IfTenant_Tenant_RefID = securityTicket.TenantID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).Single().CMN_BPT_BusinessParticipantID; var customerAccParam = new CL3_BookingAccounts.Atomic.Retrieval.P_L3BA_GBAPBPAfBP_1717 { FiscalYearID = Parameter.FiscalYearID, BusinessParticipantID_List = new Guid[] { customerBPID, tenantBPID } }; var accountsAssignments = CL3_BookingAccounts.Atomic.Retrieval.cls_Get_BookingAccount_Purpose_BPAssignment_for_BPID_List.Invoke (Connection, Transaction, customerAccParam, securityTicket).Result; Guid customerBookingAccountID = accountsAssignments.Single(x => x.BusinessParticipant_RefID == customerBPID).BookingAccount_RefID; #endregion #region Find dunning fees applied to this bill var dunningProcessMemberBill = CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess_MemberBill.Query.Search(Connection, Transaction, new CL1_ACC_DUN.ORM_ACC_DUN_DunningProcess_MemberBill.Query { BIL_BillHeader_RefID = Parameter.BillHeaderID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).SingleOrDefault(); decimal applicableProcessDunningFees = (dunningProcessMemberBill == null) ? 0.0M : dunningProcessMemberBill.ApplicableProcessDunningFees; #endregion #region Bind retrieved data to returning object var result = new L3PY_GBAfBP_1521(); // bill result.Bill = new L3PY_GBAfBP_1521a(); result.Bill.CurrencyID = billHeader.Currency_RefID; result.Bill.TotalValue_with_DunningFees_BeforeTax = billHeader.TotalValue_BeforeTax + applicableProcessDunningFees; result.Bill.TotalValuee_with_DunningFees_IncludingTax = billHeader.TotalValue_IncludingTax + applicableProcessDunningFees; // customer result.CustomerAccount = new L3PY_GBAfBP_1521b(); result.CustomerAccount.BookingAccountID = customerBookingAccountID; result.CustomerAccount.BusinessParticipantID = customerBPID; #endregion returnValue.Result = result; return(returnValue); #endregion UserCode }
protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L3PY_AFVfATtB_0934 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { //Leave UserCode region to enable user code saving #region UserCode var returnValue = new FR_Guid(); /* * 0. Find current fiscal year if none is given by the parameter * 1. Load bill to find recepient's BPID * 2. Find all values from accounting transactions that are not fully assigned to other bills * 3. Assign maximum free amount that needs to be assigned to bill */ #region 0. Find current fiscal year if none is given by the parameter Guid currentFiscalYearID = Parameter.FiscalYearID; if (currentFiscalYearID == Guid.Empty) { currentFiscalYearID = CL2_FiscalYear.Complex.Retrieval.cls_Get_Current_FiscalYear.Invoke( Connection, Transaction, securityTicket).Result.ACC_FiscalYearID; } #endregion #region 1. Load bill to find recepient's BPID var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); #endregion #region 2. Find all values from accounting transactions that are not fully assigned to other bills var unassignedParam = new CL3_Payments.Atomic.Retrieval.P_L3PY_GAATNFAtP_0846 { FiscalYearID = currentFiscalYearID, BusinessParticipantID = billHeader.BillRecipient_BuisnessParticipant_RefID }; var transactions = CL3_Payments.Atomic.Retrieval.cls_Get_All_AccountingTransactions_Not_Fully_Assigned_to_Payments.Invoke( Connection, Transaction, unassignedParam, securityTicket).Result.Where(x => x.UnassignedTransactionValue > 0); #endregion #region 3. Assign maximum free amount that needs to be assigned to bill var payedParam = new CL3_Payments.Atomic.Retrieval.P_L3PY_GPAfB_1312 { BillHeaderID_List = new Guid[] { Parameter.BillHeaderID } }; var payed = CL3_Payments.Atomic.Retrieval.cls_Get_Payed_Amount_for_Bills.Invoke(Connection, Transaction, payedParam, securityTicket).Result; decimal amountLeftToBill = billHeader.TotalValue_IncludingTax - payed.Single(x => x.BillHeaderID == Parameter.BillHeaderID).TotalPayedValue; foreach (var item in transactions) { // if the whole bill is payed with transaction - stop the iteration if (Decimal.Compare(amountLeftToBill, Decimal.Zero) == 0) { break; } decimal assignedAmount = item.UnassignedTransactionValue; if (amountLeftToBill > item.UnassignedTransactionValue) { assignedAmount = amountLeftToBill; } var assignParam = new P_L3PY_AATtB_1107 { AccountTransactionID = item.AccountingTransactionID, AssignedAmount = assignedAmount, BillHeaderID = Parameter.BillHeaderID }; cls_Assign_AccountingTransaction_to_Bill.Invoke(Connection, Transaction, assignParam, securityTicket); } #endregion return(returnValue); #endregion UserCode }
protected static FR_Bool Execute(DbConnection Connection, DbTransaction Transaction, P_L5BL_CBH_1330 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { #region UserCode var returnValue = new FR_Bool(); foreach (var BillHeaderID in Parameter.BillHeaderIDs) { // Retrieve bill header var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, BillHeaderID); // Find current status for bill header var billHeaderStatus = CL1_BIL.ORM_BIL_BillHeader_2_BillStatus.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillHeader_2_BillStatus.Query { BIL_BillHeader_RefID = BillHeaderID, IsCurrentStatus = true, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).Single(); var status = CL1_BIL.ORM_BIL_BillStatus.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillStatus.Query { BIL_BillStatusID = billHeaderStatus.BIL_BillStatus_RefID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).Single(); bool result = status.GlobalPropertyMatchingID == DLCore_DBCommons.Utils.EnumUtils.GetEnumDescription(DLCore_DBCommons.APODemand.EBillStatus.Closed); if (result == false) { throw new Exception("Bill header status is not expected. It cannot be canceled!"); } #region Cancel customerOrderReturnPosition #endregion #region Cancel bill positions // Retrieve bill positions for bill header. var billPositions = CL1_BIL.ORM_BIL_BillPosition.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition.Query { BIL_BilHeader_RefID = BillHeaderID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); // Cancel all bill positions foreach (var billPosition in billPositions) { // Delete relationship between BillPositions and ShipmentPosition in Assignment table. CL1_BIL.ORM_BIL_BillPosition_2_ShipmentPosition.Query.SoftDelete(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition_2_ShipmentPosition.Query { BIL_BillPosition_RefID = billPosition.BIL_BillPositionID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query.SoftDelete(Connection, Transaction, new CL1_BIL.ORM_BIL_BillPosition_2_CustomerOrderReturnPosition.Query { BIL_BillPosition_RefID = billPosition.BIL_BillPositionID, Tenant_RefID = securityTicket.TenantID, IsDeleted = false }); } #endregion #region Deactivate current bill statuses billHeaderStatus.IsCurrentStatus = false; billHeaderStatus.Save(Connection, Transaction); #endregion #region Add status "Canceled" for Bill Header var statusCanceled = CL1_BIL.ORM_BIL_BillStatus.Query.Search(Connection, Transaction, new CL1_BIL.ORM_BIL_BillStatus.Query { GlobalPropertyMatchingID = DLCore_DBCommons.Utils.EnumUtils.GetEnumDescription(DLCore_DBCommons.APODemand.EBillStatus.Canceled), Tenant_RefID = securityTicket.TenantID, IsDeleted = false }).Single(); var billHeader2BillStatusCanceled = new CL1_BIL.ORM_BIL_BillHeader_2_BillStatus() { BIL_BillHeader_RefID = BillHeaderID, BIL_BillStatus_RefID = statusCanceled.BIL_BillStatusID, IsCurrentStatus = true, Tenant_RefID = securityTicket.TenantID, Creation_Timestamp = DateTime.Now }; billHeader2BillStatusCanceled.Save(Connection, Transaction); #endregion } // Return success returnValue.Status = FR_Status.Success; returnValue.Result = true; return(returnValue); #endregion UserCode }
protected static FR_Guid Execute(DbConnection Connection, DbTransaction Transaction, P_L3PY_CATfDF_0849 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null) { //Leave UserCode region to enable user code saving #region UserCode var returnValue = new FR_Guid(); /* * 0. Load current fiscal year * 1. Find bill recepient and load his customer booking account * 2. Find tenant's "other income" booking account i.e. revenue account for tax that is 0% * 3. Create one transaction and multiple booking lines */ #region 0. Load current fiscal year Guid currentFiscalYearID = CL2_FiscalYear.Complex.Retrieval.cls_Get_Current_FiscalYear.Invoke(Connection, Transaction, securityTicket).Result.ACC_FiscalYearID; #endregion #region 1. Find bill recepient to load his customer booking account var billHeader = new CL1_BIL.ORM_BIL_BillHeader(); billHeader.Load(Connection, Transaction, Parameter.BillHeaderID); var cbaParam = new CL3_BookingAccounts.Atomic.Retrieval.P_L3BA_GBAPBPAfBP_1717 { FiscalYearID = currentFiscalYearID, IsCustomerAccount = true, BusinessParticipantID_List = new Guid[] { billHeader.BillRecipient_BuisnessParticipant_RefID } }; Guid customerBookingAccountID = CL3_BookingAccounts.Atomic.Retrieval.cls_Get_BookingAccount_Purpose_BPAssignment_for_BPID_List.Invoke( Connection, Transaction, cbaParam, securityTicket).Result.Single().BookingAccount_RefID; #endregion #region 2. Find tenant's "other incomes" booking account i.e. revenue account for tax that is 0% Guid tenantBPID = CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query.Search(Connection, Transaction, new CL1_CMN_BPT.ORM_CMN_BPT_BusinessParticipant.Query { IfTenant_Tenant_RefID = securityTicket.TenantID, IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).Single().CMN_BPT_BusinessParticipantID; var taxZero = CL1_ACC_TAX.ORM_ACC_TAX_Tax.Query.Search(Connection, Transaction, new CL1_ACC_TAX.ORM_ACC_TAX_Tax.Query { IsDeleted = false, Tenant_RefID = securityTicket.TenantID }).SingleOrDefault(x => Double.Equals(x.TaxRate, 0.0d)); if (taxZero == null) { return(returnValue); } var tbaParam = new CL3_BookingAccounts.Atomic.Retrieval.P_L3BA_GAfTaFY_1647 { FiscalYearID = currentFiscalYearID, IsRevenueAccount = true, IsTaxAccount = false, TaxID = new Guid[] { taxZero.ACC_TAX_TaxeID } }; Guid otherIncomeAccountID = CL3_BookingAccounts.Atomic.Retrieval.cls_Get_Assignment_for_TaxID_List_and_FiscalYearID.Invoke( Connection, Transaction, tbaParam, securityTicket).Result.Single().ACC_BOK_BookingAccount_RefID; #endregion #region 3. Create one transaction and multiple booking lines var transactionParam = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315 { AccountingTransactionTypeID = Guid.Empty, CurrencyID = billHeader.Currency_RefID, DateOfTransaction = DateTime.Now }; var bookingLines = new List <CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a>(); CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a bookingLine = null; #region Booking line for customer account bookingLine = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a() { BookingAccountID = customerBookingAccountID, // Debtor account: Dunning fee is booked as receivable with negative sign TransactionValue = -1 * Parameter.DunningFee }; bookingLines.Add(bookingLine); #endregion #region Booking line for tenant's "other income" account bookingLine = new CL3_BookingAccounts.Complex.Manipulation.P_L3BA_CATwBL_1315a { BookingAccountID = otherIncomeAccountID, // "Other income account" Dunning Fee is booked with positive sign TransactionValue = Parameter.DunningFee }; bookingLines.Add(bookingLine); #endregion transactionParam.BookingLines = bookingLines.ToArray(); Guid accountTransactionID = CL3_BookingAccounts.Complex.Manipulation.cls_Create_Accounting_Transaction_with_BookingLines.Invoke( Connection, Transaction, transactionParam, securityTicket).Result; #endregion returnValue.Result = accountTransactionID; return(returnValue); #endregion UserCode }