Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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");
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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
Пример #12
0
        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());
            }
        }