Пример #1
0
 public static bool Rent(Item i, bool beschikbaarMateriaalWeergeven)
 {
     if (!started)
         Start();
     if (!string.IsNullOrEmpty(tag))
     {
         RFIDPerson rp = new RFIDPerson
     {
             RFID = tag
         };
         try
         {
             if (DatabaseManager.ContainsItem(rp, new[] {"RFID"}).RFID.Equals(rp.RFID))
             {
                 //Niet geheel veilig maar oke
                 if (!beschikbaarMateriaalWeergeven)
                 {
                     ReservationMaterial rm = new ReservationMaterial()
                     {
                         RFID = rp.RFID,
                         Item = i.ID
                     };
                     DatabaseManager.DeleteItem(rm);
                 }
                 LeaseMaterial lm = new LeaseMaterial()
                 {
                     RFID = rp.RFID,
                     Item = i.ID
                 };
                 if (lm.EqualsPrimairy(DatabaseManager.ContainsItem(lm, new[] {"RFID", "Item"})))
                 {
                     DatabaseManager.UpdateItem(lm);
                     ReturnMaterial rm = new ReturnMaterial()
                     {
                         RFID = lm.RFID,
                         Item = i.ID
                     };
                     DatabaseManager.DeleteItem(rm);
                     return true;
                 }
                 DatabaseManager.InsertItem(lm);
                 return true;
             }
         }
         catch
         {
             MessageBox.Show("Incorrect RFID.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     return false;
 }
Пример #2
0
        public object ReturnMaterialPurchaseItem([FromBody] ReturnMaterial materialManagement)
        {
            if (materialManagement.Bill == null)
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            foreach (var bill in materialManagement.Bill)
            {
                bill.CorrectNumber();
            }
            var purchaseItems = materialManagement.Bill.Where(x => x.Number > 0);

            if (!purchaseItems.Any())
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemNotExist));
            }

            if (purchaseItems.Any(x => x.Id == 0))
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemNotExist));
            }

            if (purchaseItems.Count() != purchaseItems.GroupBy(x => x.Id).Count())
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemDuplicate));
            }

            ////退货时物料必须存在
            //if (purchaseItems.Any(x => x.BillId == 0))
            //{
            //    return Result.GenError<Result>(Error.MaterialBackNoBillError);
            //}
            //退货必须指定批次
            if (purchaseItems.Any(x => !x.HaveBatch))
            {
                return(Result.GenError <Result>(Error.MaterialBackNoBatchError));
            }

            var purchaseItemIds  = purchaseItems.Select(x => x.Id).Distinct();
            var oldPurchaseItems = MaterialPurchaseItemHelper.Instance.GetByIds <MaterialPurchaseItem>(purchaseItemIds);

            if (oldPurchaseItems.Count() != purchaseItems.Count())
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemNotExist));
            }
            if (oldPurchaseItems.Any(x => x.ErpId == 0))
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemNotBuy));
            }
            var billIds  = oldPurchaseItems.Select(x => x.BillId).Distinct();
            var allBills = MaterialHelper.GetDetails(billIds).Select(x =>
            {
                x.OldNumber = x.Number;
                x.Number    = x.Number;
                return(x);
            }).ToDictionary(x => x.BillId);

            if (oldPurchaseItems.Any(x => x.Stock <= 0 || !allBills.ContainsKey(x.BillId)))
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemNotIncrease));
            }
            if (purchaseItems.Any(x => allBills[x.BillId].Number < x.Number))
            {
                return(Result.GenError <Result>(Error.MaterialPurchaseItemCountError));
            }

            var purchaseIds = oldPurchaseItems.Select(x => x.PurchaseId).Distinct();
            var purchases   = MaterialPurchaseHelper.Instance.GetByIds <MaterialPurchase>(purchaseIds).ToDictionary(x => x.Id);

            var oldBatches = new Dictionary <int, MaterialBatch>();
            //退货的批次
            var bIds = purchaseItems.SelectMany(x => x.Batches.Select(y => y.Id)).Distinct();

            oldBatches.AddRange(MaterialBatchHelper.GetDetails(bIds).ToDictionary(x => x.Id));
            if (bIds.Count() != oldBatches.Count())
            {
                return(Result.GenError <DataResult>(Error.MaterialBatchNotExist));
            }
            if (!purchaseItems.All(x => x.Batches.All(y => oldBatches.ContainsKey(y.Id) && oldBatches[y.Id].BillId == x.BillId)))
            {
                return(Result.GenError <DataResult>(Error.MaterialBatchNotContain));
            }
            var mergeBatch = bIds.Select((Func <int, MaterialBatch>)(x =>
            {
                var oldBatch = oldBatches[x];
                var batches  = purchaseItems.Where(y => y.BillId == oldBatch.BillId).SelectMany((Func <OpMaterial, IEnumerable <MaterialBatchSimple> >)(y => y.Batches.Where((Func <MaterialBatchSimple, bool>)(z => z.Id == oldBatch.Id))));
                return(new MaterialBatch
                {
                    Id = oldBatch.Id,
                    BatchId = oldBatch.BatchId,
                    Batch = oldBatch.Batch,
                    BillId = oldBatch.BillId,
                    SupplierId = oldBatch.SupplierId,
                    Number = batches.Sum(y => y.Number),
                });
            }));

            var result = new DataResult();
            var much   = mergeBatch.Where(x => oldBatches[x.Id].Left < x.Number);

            if (much.Any())
            {
                result = new DataResult {
                    errno = Error.MaterialBatchReturnLeftLess
                };
                result.datas.AddRange(much.Select(x => $"{x.Batch} {allBills[x.BillId].Code} {x.Supplier}"));
                return(result);
            }

            var markedDateTime = DateTime.Now;
            var createUserId   = Request.GetIdentityInformation();

            foreach (var item in oldPurchaseItems)
            {
                var purchaseItem = purchaseItems.FirstOrDefault(x => x.Id == item.Id);
                if (purchaseItem != null)
                {
                    item.MarkedDateTime = markedDateTime;
                    item.Stock         -= purchaseItem.Number;
                    item.Count          = purchaseItem.Number;
                }
            }

            #region 更新
            foreach (var(billId, bill) in allBills)
            {
                bill.Number -= oldPurchaseItems.Where(x => x.BillId == billId).Sum(y => y.Count);
            }
            MaterialHelper.Return(allBills.Values);
            #endregion

            var logs = purchaseItems.Select(x =>
            {
                x.Type           = MaterialOp.退货;
                var purchaseItem = oldPurchaseItems.FirstOrDefault(y => y.Id == x.Id);
                var purchase     = purchases.ContainsKey(purchaseItem.PurchaseId) ? purchases[purchaseItem.PurchaseId] : null;
                var batches      = new List <MaterialBatch>();
                batches.AddRange(x.Batches.Select(y =>
                {
                    var batch            = oldBatches[y.Id];
                    batch.MarkedDateTime = markedDateTime;
                    batch.InTime         = markedDateTime;
                    batch.Number        -= y.Number;
                    batch.Left          -= y.Number;
                    batch.Return        += y.Number;
                    var z   = ClassExtension.CopyTo <MaterialBatchSimple, MaterialBatch>(y);
                    z.Batch = batch.Batch;
                    return(z);
                }));

                x.Purpose = $"Erp退货-{purchaseItem?.Order ?? ""}-{purchase?.ErpId.ToString() ?? ""}";
                var log   = new MaterialLog(createUserId, markedDateTime, x.Type, x.Purpose, x.Number,
                                            allBills[x.BillId].Number, purchase?.Name ?? "", createUserId, allBills[x.BillId], batches);
                log.ItemId = x.Id;
                return(log);
            }).ToList();
            if (oldBatches.Any())
            {
                MaterialBatchHelper.UpdateReturnLeft(oldBatches.Values);
            }
            MaterialPurchaseItemHelper.Return(oldPurchaseItems);
            Task.Run(() =>
            {
                if (logs.Any())
                {
                    MaterialLogHelper.Instance.Add(logs);
                }
            });
            return(Result.GenError <Result>(Error.Success));
        }
Пример #3
0
        private void btInnemen_Click(object sender, EventArgs e)
        {
            frmEnterProdCode ProdCode = new frmEnterProdCode() { Location = Location, StartPosition = FormStartPosition.CenterParent };

            if (ProdCode.ShowDialog(this) == DialogResult.OK)
            {
                string productcode = ProdCode.productcode;
                if (!System.Text.RegularExpressions.Regex.IsMatch(productcode, @"^\d+$"))
                {
                    MessageBox.Show("Productcode is geen integer, probeer opnieuw.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                Item i = new Item()
                {
                    Productcode = int.Parse(productcode)
                };
                Item item = DatabaseManager.ContainsItem(i, new [] {"Productcode"});
                if (item == default(Item))
                {
                    MessageBox.Show("Productcode bestaat niet.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                LeaseMaterial lm = new LeaseMaterial()
                {
                    Item = item.ID
                };
                LeaseMaterial lease = DatabaseManager.ContainsLease(lm, "Item");
                if (lease == default(LeaseMaterial))
                {
                    MessageBox.Show("Item is niet verhuurd.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                ReturnMaterial rm = new ReturnMaterial()
                {
                    RFID = lease.RFID,
                    Item = lease.Item
                };
                int renttime = (rm.ReturnDate - lease.LeaseDate).Days;
                Material m = new Material()
                {
                    ID = item.Material
                };
                Material mat = DatabaseManager.ContainsItem(m, new[] {"ID"});
                int price = 0;
                if(mat.PricePW > 0)
                {
                    price += (renttime / 7) * mat.PricePW + (renttime % 7) * mat.PricePD;
                }
                else
                {
                    price += renttime * mat.PricePD;
                }
                frmPayscreen payscreen = new frmPayscreen(renttime, price, rm.RFID, mat.Product) { Location = Location, StartPosition = FormStartPosition.CenterParent };
                if(payscreen.ShowDialog(this) == DialogResult.OK)
                {
                    bool gelukt = false;
                    if (rm.EqualsPrimairy(DatabaseManager.ContainsItem(rm, new[] { "RFID", "Item" })))
                    {
                        DatabaseManager.UpdateItem(rm);
                        gelukt = true;
                    }
                    else
                    {
                        DatabaseManager.InsertItem(rm);
                        gelukt = true;
                    }
                    if (gelukt)
                    {
                        MessageBox.Show("Gelukt!");
                        AvailableItems();
                        return;
                    }
                }
                else if(payscreen.ShowDialog(this) == DialogResult.Cancel)
                    return;
                MessageBox.Show("Het is helaas niet gelukt. Probeer opnieuw.");
                return;
            }
            else if(ProdCode.ShowDialog(this) == DialogResult.Cancel)
            {
                return;
            }
            MessageBox.Show("Geen geldige productcode, probeer opnieuw.");
        }