I am trying to create records of Items and Their price. Here we have two objects in is sales order and the other in the sales order line. The sales order line has items and their price Records.
I am getting records in the array from LWC Item id and Their price and using these values in for loop try to create records, but trying to this when I get 2 records- If Item List has 2 values and price having 2 values. I am trying to insert these values then Create 4 records instead of 2 records. Please, give me suggestions to where I am wrong or what changes i have to do in for loop.
Thanks
public with sharing class DonationSalesOrder {
@AuraEnabled
public static void getItemId(List<String> ItemIdList,List<String> PriceList,String userId){
OrderApi__Sales_Order__c so = createSalesOrder(userId);
insert so;
List<OrderApi__Sales_Order_Line__c> solListToBeInserted=new List<OrderApi__Sales_Order_Line__c>();
List<String> soItemKnow=new List<String>();
for(String itemId : ItemIdList){
for(String price : PriceList){
if (!soItemKnow.contains(itemId)) {
// soItemKnow.add(itemId);
OrderApi__Sales_Order_Line__c sol=createSalesOrderLine(itemId,so.Id,price);
solListToBeInserted.add(sol);
}
}
}
System.debug('List to Insertes ===========>>>>>>>>>>>'+solListToBeInserted);
if(solListToBeInserted.size()>0){
//insert solListToBeInserted;
database.insert(solListToBeInserted,false);
}
}
public static OrderApi__Sales_Order__c createSalesOrder(String userId){
// String userId = UserInfo.getUserId();
User u = [SELECT Id,ContactID FROM User WHERE Id =:userId];
system.debug('Contact ID======>>>>>'+u.ContactId);
OrderApi__Sales_Order__c salesorder = new OrderApi__Sales_Order__c();
salesorder.OrderApi__Contact__c = u.ContactId;
salesorder.OrderApi__Posting_Entity__c = 'Invoice';
salesorder.OrderApi__Schedule_Type__c = 'Simple Invoice';
salesorder.OrderApi__Status__c = 'Open';
salesOrder.OrderApi__Entity__c = 'Contact';
return salesorder;
}
public static OrderApi__Sales_Order_Line__c createSalesOrderLine(String ItemId,Id salesorderId,String PriceList){
OrderApi__Sales_Order_Line__c salesOrderLine = new OrderApi__Sales_Order_Line__c();
salesOrderLine.OrderApi__Item__c = itemId;
salesOrderLine.OrderApi__Sales_Order__c = salesorderId;
//salesOrderLine.OrderApi__Quantity__c = 1;
salesOrderLine.OrderApi__Price_Override__c = true;
// salesOrderLine.OrderApi__Sale_Price__c = Decimal.valueOf(PriceList);
salesOrderLine.OrderApi__Sale_Price__c = Decimal.valueOf(PriceList);
// insert salesOrderLine;
return salesOrderLine;
}
}
Please try this
public with sharing class DonationSalesOrder {
@AuraEnabled
public static void getItemId(List<String> ItemIdList,List<String> PriceList,String userId){
OrderApi__Sales_Order__c so = createSalesOrder(userId);
insert so;
List<OrderApi__Sales_Order_Line__c> solListToBeInserted=new List<OrderApi__Sales_Order_Line__c>();
for (Integer i = 0; i < ItemIdList.size(); i++) {
String itemId = ItemIdList[i];
String price = PriceList[i];
OrderApi__Sales_Order_Line__c sol=createSalesOrderLine(itemId,so.Id,price);
solListToBeInserted.add(sol);
}
System.debug('List to Insertes ===========>>>>>>>>>>>'+solListToBeInserted);
if(solListToBeInserted.size()>0){
database.insert(solListToBeInserted,false);
}
}
public static OrderApi__Sales_Order__c createSalesOrder(String userId){
User u = [SELECT Id,ContactID FROM User WHERE Id =:userId];
system.debug('Contact ID======>>>>>'+u.ContactId);
OrderApi__Sales_Order__c salesorder = new OrderApi__Sales_Order__c();
salesorder.OrderApi__Contact__c = u.ContactId;
salesorder.OrderApi__Posting_Entity__c = 'Invoice';
salesorder.OrderApi__Schedule_Type__c = 'Simple Invoice';
salesorder.OrderApi__Status__c = 'Open';
salesOrder.OrderApi__Entity__c = 'Contact';
return salesorder;
}
public static OrderApi__Sales_Order_Line__c createSalesOrderLine(String ItemId,Id salesorderId,String PriceList){
OrderApi__Sales_Order_Line__c salesOrderLine = new OrderApi__Sales_Order_Line__c();
salesOrderLine.OrderApi__Item__c = itemId;
salesOrderLine.OrderApi__Sales_Order__c = salesorderId;
salesOrderLine.OrderApi__Price_Override__c = true;
salesOrderLine.OrderApi__Sale_Price__c = Decimal.valueOf(PriceList);
return salesOrderLine;
}
}