public static List <DeliveryBlocksProperty> getDelBlockListCZ01(IDataCollectorServer dataCollectorServer, IDataCollectorSap dataCollectorSap, string salesOrg, string id) { List <ZV04HNProperty> zvHNList = dataCollectorSap.getZV04HNList(salesOrg, IDAEnum.Task.deliveryBlocks); List <CustomerDataProperty> cdList = dataCollectorServer.getCustomerDataList(salesOrg); List <DeliveryBlocksProperty> joinedList = getJoinedList(id, zvHNList, cdList) .Where(x => (x.orderStatus.ToLower() == "open order" || x.orderStatus.ToLower() == "credit hold")) .ToList(); List <DeliveryBlocksProperty> blockList = getBlockList(joinedList); //get previously blocked orders from log List <DeliveryBlocksProperty> prevDelBlockList = dataCollectorServer.getDelBlockLogList(salesOrg); List <int> preOrdersBlockedList = prevDelBlockList.Select(x => x.orderNumber).ToList(); //remove previously blocked orders that have been unblocked by users in order to not reapply blocks blockList.RemoveAll(x => preOrdersBlockedList.Contains(x.orderNumber)); List <DeliveryBlocksProperty> unBlockList = getUnBlockList(joinedList); List <DeliveryBlocksProperty> finalList = new List <DeliveryBlocksProperty>(); finalList.AddRange(blockList); finalList.AddRange(unBlockList); return(finalList); }
/// <summary> /// Delivery blocks in Germany are applied on orders that either dont meet the minimum order value or quantity /// Orders on block Y2 & Z9 are ignored /// Those orders are blocked wih delivery block code ZF /// Exception to this rule is if the order has a display sku. Those sku's had "DP" or "DISPLAY" in the description. ZF block for them is removed /// If the order is already blocked with ZF but has had it quantiy or/and value changed to the qualifying amount the delivery block is lifted /// Also checks if the block has been lifted previously by user and does not reapply blocks 2nd time /// </summary> /// <param name="dataCollectorServer"></param> /// <param name="dataCollectorSap"></param> /// <param name="salesOrg"></param> /// <param name="id"></param> /// <returns></returns> public static List <DeliveryBlocksProperty> getDelBlockListDE01(IDataCollectorServer dataCollectorServer, IDataCollectorSap dataCollectorSap, string salesOrg, string id) { List <ZV04IProperty> zvIList = dataCollectorSap.getZV04IList(salesOrg, IDAEnum.Task.deliveryBlocks); List <ZV04HNProperty> zvHNList = dataCollectorSap.getZV04HNList(salesOrg, IDAEnum.Task.deliveryBlocks); if (zvIList is null) { return(null); } zvHNList = zvHNList .Where(x => (x.status.ToLower() == "open order" || x.status.ToLower() == "credit hold") && x.delBlock != IDAConsts.DelBlocks.investigationPendingBlock && x.delBlock != IDAConsts.DelBlocks.leadTimeBlock) .ToList(); List <CustomerDataProperty> cdList = dataCollectorServer.getCustomerDataList(salesOrg); List <DeliveryBlocksProperty> joinedList = getJoinedList(id, zvIList, zvHNList, cdList); List <DeliveryBlocksProperty> groupedList = getGroupedList(joinedList); List <DeliveryBlocksProperty> blockList = getBlockList(groupedList); //get previously blocked orders from log List <DeliveryBlocksProperty> blockedOrdersFromFromLogList = dataCollectorServer.getDelBlockLogList(salesOrg); List <int> previouslyBlockedOrderList = blockedOrdersFromFromLogList.Select(x => x.orderNumber).ToList(); //remove previously blocked orders that have been unblocked by users in order to not reapply blocks blockList.RemoveAll(x => previouslyBlockedOrderList.Contains(x.orderNumber)); List <OrderWithDisplays> orderWithDisplaysList = (from zvi in zvIList where (zvi.materialDescription.ToUpper().Contains("DP") || zvi.materialDescription.ToUpper().Contains("DISPLAY")) && (zvi.status.ToLower() == "open order" || zvi.status.ToLower() == "credit hold") && zvi.delBlock == IDAConsts.DelBlocks.belowMOQDelBlock group zvi by zvi.order into g select new OrderWithDisplays(g.Key) ) .Distinct() .ToList(); //remove orders with displays from blocklist blockList = blockList.Where(x => orderWithDisplaysList.Any(y => y.orderNumber != x.orderNumber)).ToList(); List <DeliveryBlocksProperty> unBlockList = getUnBlockList(groupedList, orderWithDisplaysList); List <DeliveryBlocksProperty> finalList = new List <DeliveryBlocksProperty>(); finalList.AddRange(blockList); finalList.AddRange(unBlockList); return(finalList); }