예제 #1
0
        public static bool SaveNewDetailsCommand(OIGN_GoodsReceipt SelectedGoodsReceipt, OITB_Groups SelectedGroup, UMovement SelectedMovement)
        {
            bool needUpdate = false;

            lock (Extensions.Locker)
            {
                var db = ContextFactory.GetDBContext();

                SelectedGoodsReceipt.ItmsGrpCod = SelectedGroup.ItmsGrpCod;

                SelectedGoodsReceipt.IdMovement = SelectedMovement.Code;

                //SelectedGoodsReceipt.IGN1_GoodsReceiptDetail = GoodsReceiptsDetails;

                //if (!db.OIGN_GoodsReceipt.Any(g => g.IdGoodReceiptL == SelectedGoodsReceipt.IdGoodReceiptL))
                //{
                //    //GoodsReceiptsDetails.ToList().ForEach(d => SelectedGoodsReceipt.IGN1_GoodsReceiptDetail.Add(d));
                //    needUpdate = true;
                //    db.OIGN_GoodsReceipt.Add(SelectedGoodsReceipt);
                //}
                if (SelectedGoodsReceipt.IdGoodReceiptL == 0)
                {
                    db.OIGN_GoodsReceipt.Add(SelectedGoodsReceipt);
                }
                else if (db.Entry(SelectedGoodsReceipt).State == EntityState.Modified)
                {
                    SelectedGoodsReceipt.ModifiedDateL = DateTime.Now;
                    SelectedGoodsReceipt.ModifiedByL   = Config.CurrentUser;
                }

                ContextFactory.SaveChanges();
            }

            return(needUpdate);
        }
예제 #2
0
        public static void SaveTransaction(OIGN_GoodsReceipt obj)
        {
            lock (Extensions.Locker)
            {
                var db = ContextFactory.GetDBContext();

                var transfers = obj.IGN1_GoodsReceiptDetail.Select(t => new OINM_Transaction(obj, t)).ToList();

                transfers.ForEach(t => db.OINM_Transaction.Add(t));

                ContextFactory.SaveChanges();

                //Actualizar existencias

                //var articles = (from detail in obj.IGN1_GoodsReceiptDetail
                //                join article in db.OITW_BranchArticles on detail.ItemCode equals article.ItemCode
                //                where article.WhsCode == detail.WhsCode
                //                select article).ToList();

                //articles.ForEach(a =>
                //{
                //    var detail = obj.IGN1_GoodsReceiptDetail.FirstOrDefault(d => d.ItemCode == a.ItemCode);
                //    a.OnHand = a.OnHand + detail.Quantity;
                //    a.OnHand1 = a.OnHand1 + detail.Quantity;
                //});

                //ContextFactory.SaveChanges();
                StoredCallbackProcessor.UpdateStock();
            }
        }
예제 #3
0
        private static OIGN_GoodsReceipt SyncUpload(OIGN_GoodsReceipt receipt)
        {
            var result = WebApiClient.AddGoodReceipt(receipt).Result;

            receipt.UpdateModelPropertiesFrom(result.Model);
            receipt.StateL = LocalStatus.Procesado;
            result.UpdateEntityVersion();
            GoodsReceiptHelper.SaveTransaction(receipt);
            return(receipt);
        }
        public override void ExecuteNewCommand()
        {
            FormTitle = "Nueva Entrada";

            SelectedGoodsReceipt = new OIGN_GoodsReceipt();
            SelectedGroup        = null;
            SelectedMovement     = null;
            GoodsReceiptsDetails = new ObservableCollection <IGN1_GoodsReceiptDetail>();
            IsEnabled            = true;
            ShowDialog(new GoodsReceiptView(), this, resizeMode: ResizeMode.CanResize);
        }
예제 #5
0
 public static OIGN_GoodsReceipt Synchronize(OIGN_GoodsReceipt model)
 {
     CheckForUpdates();// Actualizar cambios antes de subir y verificar si el objeto no fue ya procesado
     model = GoodsReceiptHelper.Get(model.IdGoodReceiptL);
     if (model.StateL != LocalStatus.Procesado)
     {
         return(model.Upload(SyncUpload));
     }
     else
     {
         return(model);
     }
 }
예제 #6
0
        public static void DeleteGoodsReceipt(OIGN_GoodsReceipt selectedGoodsReceipt)
        {
            if (selectedGoodsReceipt == null)
            {
                return;
            }

            lock (Extensions.Locker)
            {
                var db = ContextFactory.GetDBContext();

                if (selectedGoodsReceipt.IdGoodReceiptL > 0)
                {
                    // selectedGoodsReceipt.IGN1_GoodsReceiptDetail.ForEach(d => d.ChangeEntityState(EntityState.Deleted));

                    db.OIGN_GoodsReceipt.Remove(selectedGoodsReceipt);
                }
            }
        }
예제 #7
0
        public static void Process(InventoryCount selectedInventoryCount)
        {
            lock (Extensions.Locker)
            {
                var db = ContextFactory.GetDBContext();

                ContextFactory.SaveChanges();

                var diferencias = (
                    from t0 in db.InventoryCountDetail// selectedInventoryCount.InventoryCountDetail //Conteo fisico
                    join t1 in  db.OITW_BranchArticles on t0.ItemCode equals t1.ItemCode
                    join t2 in db.UMovements_Acc on t0.ItemCode equals t2.U_ITEMCODE
                    where t1.WhsCode.Equals(Config.WhsCode) && (t0.Quantity - t1.OnHand1) != 0 &&
                    t0.IdInventoryCountL == selectedInventoryCount.IdInventoryCountL &&
                    (t2.U_IDMOVIMIENTO.Equals("1") || t2.U_IDMOVIMIENTO.Equals("2"))
                    select new {
                    itemcode = t0.ItemCode,
                    whscode = t1.WhsCode,
                    Acc = t2.U_CUENTA,
                    dif = t0.Quantity - t1.OnHand1,
                    tipo = t2.U_IDMOVIMIENTO
                }
                    ).ToList();

                var entradas = diferencias.Where(c => c.dif > 0 && c.tipo.Equals("1")).ToList();
                var salidas  = diferencias.Where(c => c.dif < 0 && c.tipo.Equals("2")).ToList();

                //Crear entradas y salidas


                var receipt = new OIGN_GoodsReceipt()
                {
                    Comments   = "Ajuste Entrada por Conteo Fisico - SIGI",
                    IdMovement = "1",
                    ItmsGrpCod = selectedInventoryCount.ItmsGrpCod
                };

                var issue = new OIGE_GoodsIssues()
                {
                    Comments   = "Ajuste de Salida por Conteo Fisico - SIGI",
                    IdMovement = "2",
                    ItmsGrpCod = selectedInventoryCount.ItmsGrpCod
                };


                if (salidas.Any())
                {
                    //agregar detalles
                    salidas.ForEach(d => {
                        var article = db.OITM_Articles.FirstOrDefault(c => c.ItemCode == d.itemcode);

                        issue.IGE1_GoodsIssueDetail.Add(new IGE1_GoodsIssueDetail()
                        {
                            ItemCode   = article.ItemCode,
                            Dscription = article.ItemName,
                            Quantity   = d.dif * -1,
                            UnitMsr    = article.InvntryUom,
                            AcctCode   = d.Acc ?? Config.DefaultAcc,
                        });
                    });
                    db.OIGE_GoodsIssues.Add(issue);
                    ContextFactory.SaveChanges();
                }
                if (entradas.Any())
                {
                    //agregar detalles
                    entradas.ForEach(d => {
                        var article = db.OITM_Articles.FirstOrDefault(c => c.ItemCode == d.itemcode);

                        receipt.IGN1_GoodsReceiptDetail.Add(new IGN1_GoodsReceiptDetail()
                        {
                            ItemCode   = article.ItemCode,
                            Dscription = article.ItemName,
                            Quantity   = d.dif,
                            UnitMsr    = article.InvntryUom,
                            AcctCode   = d.Acc ?? Config.DefaultAcc,
                        });
                    });
                    db.OIGN_GoodsReceipt.Add(receipt);
                    ContextFactory.SaveChanges();
                }

                //Luego de creados lo ajustes marcar como procesado el conteo

                selectedInventoryCount.StateL = LocalStatus.Procesado;
                ContextFactory.SaveChanges();

                //procesar entradas
                if (receipt.IGN1_GoodsReceiptDetail.Any())
                {
                    Synchronization.Synchronize(receipt);
                }

                //Procesar salida
                if (issue.IGE1_GoodsIssueDetail.Any())
                {
                    Synchronization.Synchronize(issue);
                }

                ContextFactory.SaveChanges();
            }
        }
예제 #8
0
 public static Task <Synchro <OIGN_GoodsReceipt> > AddGoodReceipt(OIGN_GoodsReceipt receipt)
 {
     return(PostAsync <OIGN_GoodsReceipt, Synchro <OIGN_GoodsReceipt> >("api/GoodsReceipts", receipt));
 }