/// <summary> /// copies am Article and his Childs to ProductionOrder /// Creates Demand Provider for Production oder and DemandRequests for childs /// </summary> /// <returns></returns> public ProductionOrder CopyArticleToProductionOrder(int articleId, decimal quantity, int demandRequesterId) { var article = Articles.Include(a => a.ArticleBoms).ThenInclude(c => c.ArticleChild).Single(a => a.Id == articleId); var mainProductionOrder = new ProductionOrder { ArticleId = article.Id, Name = "Prod. Auftrag: " + article.Name, Quantity = quantity, }; ProductionOrders.Add(mainProductionOrder); CreateProductionOrderWorkSchedules(mainProductionOrder); var demandProvider = new DemandProviderProductionOrder() { ProductionOrderId = mainProductionOrder.Id, Quantity = quantity, ArticleId = article.Id, DemandRequesterId = demandRequesterId, }; Demands.Add(demandProvider); SaveChanges(); return(mainProductionOrder); }
/// <summary> /// Deepseach thorugh tree to Return all Workschedules Related to one Order. /// </summary> /// <param name="demandRequester"></param> /// <param name="productionOrderWorkSchedule"></param> /// <returns>List of ProductionOrderWorkSchedules - Attention May Include Dupes Through Complex Backlinks !</returns> public List <ProductionOrderWorkSchedule> GetWorkSchedulesFromDemand(IDemandToProvider demandRequester, ref List <ProductionOrderWorkSchedule> productionOrderWorkSchedule) { foreach (var item in demandRequester.DemandProvider.OfType <DemandProviderProductionOrder>()) { var productionOrders = ProductionOrders .Include(x => x.ProductionOrderWorkSchedule) .ThenInclude(x => x.MachineGroup) .Include(x => x.ProductionOrderWorkSchedule) .ThenInclude(x => x.Machine) .Include(x => x.ProductionOrderBoms) .ThenInclude(x => x.DemandProductionOrderBoms) .ThenInclude(x => x.DemandProvider) .FirstOrDefault(x => x.Id == item.ProductionOrderId); productionOrderWorkSchedule.AddRange(productionOrders.ProductionOrderWorkSchedule); foreach (var po in productionOrders.ProductionOrderBoms) { foreach (var dpob in po.DemandProductionOrderBoms) { GetWorkSchedulesFromDemand(dpob, ref productionOrderWorkSchedule); } } } return(productionOrderWorkSchedule); }
public static void UpdateStatusReleased(T41Entity two, ProductionOrders prd) { principal.GravaAudit("Inicia OP Liberado"); using (var rs = new MyRecordSet()) { principal.GravaAudit("Pesquisa OP " + two.OWOR_DocNum); if (prd.GetByKey(two.OWOR_DocNum)) { principal.GravaAudit("Acho OP"); prd.ProductionOrderStatus = BoProductionOrderStatusEnum.boposReleased; } int ii = prd.Update(); if (ii != 0) { principal.GravaAudit("Erro " + MyLibs.v2.sbo.SAPConnection.DI.GetLastErrorDescription()); } else { principal.GravaAudit("Atualizado para liberado com sucesso"); } } principal.GravaAudit("termino OP Liberado"); }
/// <summary> /// returns the OrderIds for the ProductionOrder /// </summary> /// <param name="po"></param> /// <returns></returns> public List <int> GetOrderIdsFromProductionOrder(ProductionOrder po) { po = ProductionOrders.Include(a => a.DemandProviderProductionOrders).ThenInclude(b => b.DemandRequester).Single(a => a.Id == po.Id); var ids = new List <int>(); var requester = (from provider in po.DemandProviderProductionOrders select provider.DemandRequester).ToList(); if (!requester.Any() || requester.First() == null) { return(ids); } foreach (var singleRequester in requester) { if (singleRequester.GetType() == typeof(DemandProductionOrderBom)) { ids.AddRange(GetOrderIdsFromProductionOrder( ((DemandProductionOrderBom)singleRequester).ProductionOrderBom.ProductionOrderParent)); } else if (singleRequester.GetType() == typeof(DemandOrderPart)) { var dop = Demands.OfType <DemandOrderPart>().Include(a => a.OrderPart).Single(a => a.Id == singleRequester.Id); ids.Add(dop.OrderPart.OrderId); } } return(ids); }
public ProductionOrder CreateProductionOrder(IDemandToProvider demand, int duetime, int simulationId) { var productionOrder = new ProductionOrder() { ArticleId = demand.Article.Id, Quantity = SimulationConfigurations.Single(a => a.Id == simulationId).Lotsize, Duetime = duetime }; ProductionOrders.Add(productionOrder); SaveChanges(); return(productionOrder); }
} // RecibirProductoTerminado private void CerrarOrdenFabricacion(int docEntry) { ProductionOrders order = (ProductionOrders)company.GetBusinessObject(BoObjectTypes.oProductionOrders); if (order.GetByKey(docEntry)) { order.ProductionOrderStatus = BoProductionOrderStatusEnum.boposClosed; if (order.Update() != 0) { raiseError(); } } } // CerrarOrdenFabricacion
public static Result CancelDocument(int docEntry, int entryID, int exitID) { var result = new Result(); Documents oStockEntry = null; Documents oStockExit = null; ProductionOrders oProductionOrder = null; try { Parallel.Invoke( () => { oProductionOrder = (ProductionOrders)DIApplication.Company.GetBusinessObject(BoObjectTypes.oProductionOrders); //OWOR oProductionOrder.GetByKey(docEntry); }, () => { oStockEntry = (Documents)DIApplication.Company.GetBusinessObject(BoObjectTypes.oInventoryGenEntry); //OIGN oStockEntry.GetByKey(entryID); }, () => { oStockExit = (Documents)DIApplication.Company.GetBusinessObject(BoObjectTypes.oInventoryGenExit); //OIGE oStockExit.GetByKey(exitID); }); oProductionOrder.ProductionOrderStatus = BoProductionOrderStatusEnum.boposClosed; oProductionOrder.UserFields.Fields.Item("U_GLO_DocNum").Value = oStockEntry.DocNum; oProductionOrder.UserFields.Fields.Item("U_GLO_DocNumSal").Value = oStockExit.DocNum; if (oProductionOrder.Update() != 0) { LogService.WriteError("TransferDI (Draft) " + DIApplication.Company.GetLastErrorDescription()); result.Success = false; result.Message = "Error: " + DIApplication.Company.GetLastErrorDescription(); } else { result.Success = true; result.Message = String.Format("La Orden de Producción#{0} se cerro con éxito!", oProductionOrder.DocumentNumber); } } catch (Exception ex) { HandleException(ex, "StockEntryDI.CreateDocument", ref result); } finally { MemoryUtility.ReleaseComObject(oProductionOrder); } return(result); }
public ProductionOrder GetEarliestProductionOrder(List <ProductionOrder> productionOrders) { ProductionOrder earliestProductionOrder = null; foreach (var productionOrder in productionOrders) { var po = ProductionOrders.Include(a => a.ProductionOrderWorkSchedule).Single(a => a.Id == productionOrder.Id); if (earliestProductionOrder == null || po.ProductionOrderWorkSchedule.Min(a => a.Start) < earliestProductionOrder.ProductionOrderWorkSchedule.Min(a => a.Start)) { earliestProductionOrder = po; } } return(earliestProductionOrder); }
public List <ProductionOrder> CheckForProductionOrders(IDemandToProvider demand, decimal amount, int timer) { var possibleProductionOrders = new List <ProductionOrder>(); var perfectFittingProductionOrders = new List <ProductionOrder>(); var pos = ProductionOrders.Include(b => b.ProductionOrderWorkSchedule) .Include(a => a.DemandProviderProductionOrders) .Where(a => a.ArticleId == demand.ArticleId && (GetLatestEndFromProductionOrder(a) == null || GetLatestEndFromProductionOrder(a) == 0 || GetLatestEndFromProductionOrder(a) >= timer)).ToList(); foreach (var po in pos) { var availableAmount = GetAvailableAmountFromProductionOrder(po); if (availableAmount == amount) { perfectFittingProductionOrders.Add(po); } else if (availableAmount > 0) { possibleProductionOrders.Add(po); } } if (!possibleProductionOrders.Any()) { return(null); } if (perfectFittingProductionOrders.Any()) { return new List <ProductionOrder>() { GetEarliestProductionOrder(perfectFittingProductionOrders) } } ; var list = new List <ProductionOrder>(); while (amount > 0 && possibleProductionOrders.Any()) { list.Add(GetEarliestProductionOrder(possibleProductionOrders)); possibleProductionOrders.Remove(list.Last()); amount -= GetAvailableAmountFromProductionOrder(list.Last()); } return(list); }
public DbTransactionData(ProductionDomainContext productionDomainContext) { _productionDomainContext = productionDomainContext; // cache tables // TODO: This line should be removed _articles = _productionDomainContext.Articles.Include(m => m.ArticleBoms) .ThenInclude(m => m.ArticleChild).Include(m => m.ArticleBoms) .ThenInclude(x => x.Operation).ThenInclude(x => x.ResourceCapability) .ThenInclude(s => s.ResourceCapabilityProvider).ThenInclude(r => r.ResourceSetups) .ThenInclude(x => x.Resource) .Include(x => x.ArticleToBusinessPartners).ThenInclude(x => x.BusinessPartner) .ToList(); _productionOrderBoms = new ProductionOrderBoms(_productionDomainContext.ProductionOrderBoms.ToList()); _stockExchangeDemands = new StockExchangeDemands(_productionDomainContext.StockExchanges.ToList()); _stockExchangeProviders = new StockExchangeProviders(_productionDomainContext.StockExchanges.ToList()); _productionOrders = new ProductionOrders(_productionDomainContext.ProductionOrders.ToList()); _purchaseOrderParts = new PurchaseOrderParts(_productionDomainContext.PurchaseOrderParts.ToList()); _customerOrderParts = new CustomerOrderParts(_productionDomainContext.CustomerOrderParts.ToList()); _customerOrders = new CustomerOrders(_productionDomainContext.CustomerOrders.ToList()); // others _purchaseOrders.PushAll(_productionDomainContext.PurchaseOrders.ToList()); _productionOrderOperations = new ProductionOrderOperations( _productionDomainContext.ProductionOrderOperations.ToList()); // demandToProvider _demandToProviderTable = new LinkDemandAndProviderTable(_productionDomainContext.DemandToProviders); _providerToDemandTable = new LinkDemandAndProviderTable(_productionDomainContext.ProviderToDemand); }
private int CrearOrden(ElaboracionPartidaVO itemVO, String codigoAlmacen) { int docEntry = -1; ProductionOrders order = (ProductionOrders)company.GetBusinessObject(BoObjectTypes.oProductionOrders); order.Warehouse = codigoAlmacen; order.ItemNo = itemVO.itemCode; order.DueDate = DateTime.Today; order.PlannedQuantity = itemVO.cantidad; String referencia = "Generado desde el Portal"; order.Remarks = referencia; order.JournalRemarks = referencia; if (order.Add() == 0) { string strDocEntry = company.GetNewObjectKey(); docEntry = int.Parse(strDocEntry); order.GetByKey(docEntry); order.ProductionOrderStatus = BoProductionOrderStatusEnum.boposReleased; this.resultadoVO.DocNum = order.DocumentNumber; this._docEntryOf = strDocEntry; this._docNumOf = order.DocumentNumber.ToString(); for (int i = 0; i < order.Lines.Count; i++) { order.Lines.SetCurrentLine(i); order.Lines.Warehouse = codigoAlmacen; } if (order.Update() != 0) { raiseError(); } } else { raiseError(); } return docEntry; } // CrearOrden
public static void UpdateLineOP(T41Entity two, ProductionOrders prd) { try { using (var rs = new MyRecordSet()) { try { principal.GravaAudit("Inicio remove linhas OP"); string sql1 = "delete from WOR1 where docentry = " + two.OWOR_DocNum + "and ItemType = 4 "; rs.DoQuery(sql1); principal.GravaAudit("Termino remove linhas OP "); } catch (Exception ex) { principal.GravaAudit("EX " + ex.Message.ToString()); principal.GravaAudit("Continua"); } string sql = "Select distinct T1.DocEntry, T3.ItemCode, 'PP' As 'ProductionWarehouse', ConsumptionQuantity , T0.OItm_CodeBars, T0.OWor_DocNum from [Sage_Transaction41] T0 "; sql += "left join OWOR T1 on T1.U_ORDER_JOMAR = T0.OWOR_Order_Jomar and T1.Type = 'S'"; sql += "left join OITM T3 on T3.CodeBars = T0.OITM_CodeBars "; sql += "left join ITT1 T2 on T2.Code = T3.ItemCode and T2.Type = 4 "; sql += "where T0.OWOR_Order_Jomar = '" + two.OWOR_U_ORDER_JOMAR + "' and readySAP <> 'Y' "; principal.GravaAudit("Inicio add linhas OP"); principal.GravaAudit(sql); rs.DoQuery(sql); int a = 0; int ii = 0; while (rs.HasNext()) { if (prd.GetByKey(rs.GetFieldValue(0).ToInt())) { principal.GravaAudit("Item " + rs.GetFieldValue(1).ToString()); principal.GravaAudit("PlannedQuantity " + rs.GetFieldValue(3).ToDouble().ToString()); principal.GravaAudit("Warehouse " + rs.GetFieldValue(2).ToString()); principal.GravaAudit("U_Line_Jomar " + two.OWOR_U_ORDER_JOMAR); prd.Lines.Add(); prd.Lines.ItemNo = rs.GetFieldValue(1).ToString(); prd.Lines.ItemType = ProductionItemType.pit_Item; prd.Lines.PlannedQuantity = rs.GetFieldValue(3).ToDouble(); //prd.Lines.BaseQuantity = rs.GetFieldValue(0).ToInt(); prd.Lines.Warehouse = rs.GetFieldValue(2).ToString(); prd.Lines.UserFields.Fields.Item("U_Line_Jomar").Value = two.OWOR_U_ORDER_JOMAR; ii = prd.Update(); } } principal.GravaAudit("Termino add linhas OP"); if (ii != 0) { principal.GravaAudit("Erro " + MyLibs.v2.sbo.SAPConnection.DI.GetLastErrorDescription()); } else { two.ReadBySAP = 'Y'; UpdateStatus41(two); principal.GravaAudit("Concluido com sucesso"); } } } catch (Exception ex) { principal.GravaAudit("Erro " + ex.Message.ToString()); } }