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; }
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)); }
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."); }