private static void generateSerialNumber( Map<Id,GRN__c> grnLineList,Map<Id,List<Order_Line__c>> orderLineList,List<Item_Line__c> newItemLineList){
Map<Id,Integer> exsistingOrdLineMap = new Map<Id,Integer>();
Map<Id,Integer> ordLineCntMap = new Map<Id,Integer>();
Map<Id,String> lastestSerialOrderOnProc = new Map<Id,String>();
Map<Id,String> lastestItemSerialOnProc = new Map<Id,String>();
Map<Id,String> lastestOrdItemSerialProc = new Map<Id,String>();
Map<Id,Map<String,Integer>> lastItemSrlPrcOrdCnt = new Map<Id,Map<String,Integer>>();
/*for(Id key : procGRNLatestData.keySet()){
List<String> splitString = procGRNLatestData.get(key).split('-',3);
lastestSerialOrderOnProc.put(key,splitString[1]);
lastestItemSerialOnProc.put(key,splitString[2]);
List<String> splitString2 = procGRNLatestData.get(key).split('-',2);
lastestOrdItemSerialProc.put(key,splitString2[1]);
}*/
for(Item_Line__c item :newItemLineList){
if(serialNumberMap.containsKey(item.Procurement_Line__c)){
Boolean recdQtGtReqQT = serialNumberMap.get(item.Procurement_Line__c).Purchase_Order_Line__r.Total_received_quantity__c > serialNumberMap.get(item.Procurement_Line__c).Procurement_Line__r.Quantity_Required__c ? true: false;
Integer ltstSrlNum = serialNumberMap.containsKey(item.Procurement_Line__c) && serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c !=null ? Integer.ValueOf(serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c.split('-',3)[2]) :0;
String ltstOrdLineNum = serialNumberMap.containsKey(item.Procurement_Line__c) && serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c !=null ? serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c.split('-',3)[1] :null;
if(ltstOrdLineNum !=null){
Integer existingNumber = lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c) && lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c) !=null && lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c).ContainsKey(ltstOrdLineNum) ?lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c).get(ltstOrdLineNum):0;
Integer newNumb = ltstSrlNum+existingNumber;
Map<String, Order_Line__c> innerOrdrLineMap = ordlineData.get(item.Procurement_Line__c);
List<Order_Line__c> ordeLineList = new List<Order_Line__c>(innerOrdrLineMap.Values());
List<String> innerKeyList = new List<String>(innerOrdrLineMap.KeySet());
Integer IndexValue = innerKeyList.indexOf(ltstOrdLineNum);
// Boolean isTrue = serialNumberMap.get(item.Procurement_Line__c).Procurement_Line__r.Quantity_Required__c >= newNumb ?true : false;
Boolean isTrue = innerOrdrLineMap.get(ltstOrdLineNum).Quantity__c >= newNumb ? true: false;
if(isTrue){
if (!lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c)){
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String, Integer>{ordeLineList[IndexValue].Name=> newNumb});
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newNumb).leftPad(7,'0');
system.debug('Inner Number'+newNumb);
}else{
// system.debug('inside null');
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if (innerMap.containsKey(ordeLineList[IndexValue].Name)) {
Integer newVal = innerMap.get(ordeLineList[IndexValue].Name) +1; //newNumb;
innerMap.put(ordeLineList[IndexValue].Name, newVal);
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newVal).leftPad(7,'0');
} else {
innerMap.put(ordeLineList[IndexValue].Name, newNumb);
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newNumb).leftPad(7,'0');
}
}
}else{
Integer newSrNum = 1;
Integer Index = IndexValue;
Index++;
//List<Order_Line__c> innerKeyList = new List<Order_Line__c>(innerOrdrLineMap.Values());
if (!lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c)) {
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String, Integer>{ordeLineList[Index].Name=> newSrNum});
item.Serial_Number__c = ordeLineList[Index].Order__r.Name+'-'+ordeLineList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}else{
system.debug('inside order Line null');
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if (innerMap.containsKey(ordeLineList[Index].Name)) {
Integer currentCount = innerMap.get(ordeLineList[Index].Name);
if (currentCount >= ordeLineList[Index].Quantity__c) {
Index++;
if (ordeLineList.size() > Index) {
// Integer newVal = innerMap.get(innerKeyList[Index].Name) + newSrNum;
innerMap.put(ordeLineList[Index].Name, newSrNum);
item.Serial_Number__c = ordeLineList[Index].Order__r.Name+'-'+ordeLineList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}else{
Integer newVal = innerMap.get(ordeLineList[Index].Name) + newSrNum;
innerMap.put(ordeLineList[Index].Name, newVal);
item.Serial_Number__c = ordeLineList[Index].Order__r.Name+'-'+ordeLineList[Index].Name+'-'+ String.valueOf(newVal).leftPad(7,'0');
innerMap.put(ordeLineList[Index].Name, newVal);
}
}else {
innerMap.put(ordeLineList[Index].Name, newSrNum);
item.Serial_Number__c = ordeLineList[Index].Order__r.Name+'-'+ordeLineList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}
}
/*Integer newSrNum =1;
if(ordeLineList.size()>1 ){
IndexValue++;
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if(!innerMap.containsKey(ordeLineList[IndexValue].Name)){
system.debug('Index Value'+IndexValue);
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String,Integer>{ordeLineList[IndexValue].Name=> newSrNum});
}
}else{
if (!lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c)){
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String, Integer>{ordeLineList[IndexValue].Name=> newNumb});
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newNumb).leftPad(7,'0');
system.debug('Inner Number'+newNumb);
}else{
// system.debug('inside null');
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if (innerMap.containsKey(ordeLineList[IndexValue].Name)) {
Integer newVal = innerMap.get(ordeLineList[IndexValue].Name) +1; //newNumb;
innerMap.put(ordeLineList[IndexValue].Name, newVal);
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newVal).leftPad(7,'0');
} else {
innerMap.put(ordeLineList[IndexValue].Name, newNumb);
item.Serial_Number__c = ordeLineList[IndexValue].Order__r.Name+'-'+ordeLineList[IndexValue].Name+'-'+ String.valueOf(newNumb).leftPad(7,'0');
}
}
}*/
}else{
Integer newSrNum = 1;
Integer Index = 0;
Map<String, Order_Line__c> innerOrdrLineMap = ordlineData.get(item.Procurement_Line__c);
List<Order_Line__c> innerKeyList = new List<Order_Line__c>(innerOrdrLineMap.Values());
if (!lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c)) {
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String, Integer>{innerKeyList[Index].Name=> newSrNum});
item.Serial_Number__c = innerKeyList[0].Order__r.Name+'-'+innerKeyList[0].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}else{
// system.debug('inside order Line null');
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if (innerMap.containsKey(innerKeyList[Index].Name)) {
Integer currentCount = innerMap.get(innerKeyList[Index].Name);
if (currentCount >= innerKeyList[Index].Quantity__c) {
Index++;
if (innerKeyList.size() > Index) {
// Integer newVal = innerMap.get(innerKeyList[Index].Name) + newSrNum;
innerMap.put(innerKeyList[Index].Name, newSrNum);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}else{
Integer newVal = innerMap.get(innerKeyList[Index].Name) + newSrNum;
innerMap.put(innerKeyList[Index].Name, newVal);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newVal).leftPad(7,'0');
innerMap.put(innerKeyList[Index].Name, newVal);
}
}else{
innerMap.put(innerKeyList[Index].Name, newSrNum);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}
}
}else{
// Integer ltstSrlNum = serialNumberMap.containsKey(item.Procurement_Line__c) && serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c !=null ? Integer.ValueOf(serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c.split('-',3)[2]) :0;
// String ltstOrdLineNum = serialNumberMap.containsKey(item.Procurement_Line__c) && serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c !=null ? serialNumberMap.get(item.Procurement_Line__c).Serial_Number__c.split('-',3)[1] :null;
//Integer existingNumber = lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c) && lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c) !=null ?lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c).get(ltstOrdLineNum):0;
// Integer newNumb = ltstSrlNum+existingNumber;
Integer newSrNum = 1;
Integer Index = 0;
Map<String, Order_Line__c> innerOrdrLineMap = ordlineData.get(item.Procurement_Line__c);
List<Order_Line__c> innerKeyList = new List<Order_Line__c>(innerOrdrLineMap.Values());
if (!lastItemSrlPrcOrdCnt.containsKey(item.Procurement_Line__c)) {
lastItemSrlPrcOrdCnt.put(item.Procurement_Line__c, new Map<String, Integer>{innerKeyList[Index].Name=> newSrNum});
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}else{
system.debug('inside order Line null');
Map<String, Integer> innerMap = lastItemSrlPrcOrdCnt.get(item.Procurement_Line__c);
if (innerMap.containsKey(innerKeyList[Index].Name)) {
Integer currentCount = innerMap.get(innerKeyList[Index].Name);
if (currentCount >= innerKeyList[Index].Quantity__c) {
Index++;
if (innerKeyList.size() > Index) {
// Integer newVal = innerMap.get(innerKeyList[Index].Name) + newSrNum;
innerMap.put(innerKeyList[Index].Name, newSrNum);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}else{
Integer newVal = innerMap.get(innerKeyList[Index].Name) + newSrNum;
innerMap.put(innerKeyList[Index].Name, newVal);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newVal).leftPad(7,'0');
innerMap.put(innerKeyList[Index].Name, newVal);
}
}else {
innerMap.put(innerKeyList[Index].Name, newSrNum);
item.Serial_Number__c = innerKeyList[Index].Order__r.Name+'-'+innerKeyList[Index].Name+'-'+ String.valueOf(newSrNum).leftPad(7,'0');
}
}
}
}
}