private GarmentInventorySummary GenerateGarmentInventorySummary(GarmentReceiptCorrection garmentReceiptCorrection, GarmentReceiptCorrectionItem garmentReceiptCorrectionItem, GarmentInventoryMovement garmentInventoryMovement) { var garmentInventorySummary = new GarmentInventorySummary(); EntityExtension.FlagForCreate(garmentInventorySummary, identityService.Username, USER_AGENT); do { garmentInventorySummary.No = CodeGenerator.Generate(); }while (dbSetGarmentInventorySummary.Any(m => m.No == garmentInventorySummary.No)); garmentInventorySummary.ProductId = garmentReceiptCorrectionItem.ProductId; garmentInventorySummary.ProductCode = garmentReceiptCorrectionItem.ProductCode; garmentInventorySummary.ProductName = garmentReceiptCorrectionItem.ProductName; garmentInventorySummary.StorageId = garmentReceiptCorrection.StorageId; garmentInventorySummary.StorageCode = garmentReceiptCorrection.StorageCode; garmentInventorySummary.StorageName = garmentReceiptCorrection.StorageName; garmentInventorySummary.Quantity = garmentInventoryMovement.After; garmentInventorySummary.UomId = garmentReceiptCorrectionItem.SmallUomId; garmentInventorySummary.UomUnit = garmentReceiptCorrectionItem.SmallUomUnit; garmentInventorySummary.StockPlanning = 0; return(garmentInventorySummary); }
public async Task <(GarmentReceiptCorrection GarmentReceiptCorrection, GarmentUnitReceiptNote GarmentUnitReceiptNote)> GetNewData() { var garmentUnitReceiptNote = await Task.Run(() => garmentUnitReceiptNoteDataUtil.GetTestData()); GarmentReceiptCorrection garmentReceiptCorrection = new GarmentReceiptCorrection { CorrectionDate = DateTimeOffset.Now, UnitCode = garmentUnitReceiptNote.UnitCode, UnitId = garmentUnitReceiptNote.UnitId, UnitName = garmentUnitReceiptNote.UnitName, URNId = garmentUnitReceiptNote.Id, URNNo = garmentUnitReceiptNote.URNNo, StorageCode = garmentUnitReceiptNote.StorageCode, StorageId = garmentUnitReceiptNote.StorageId, StorageName = garmentUnitReceiptNote.StorageName, Remark = "Remark", Items = new List <GarmentReceiptCorrectionItem>() }; foreach (var detail in garmentUnitReceiptNote.Items) { garmentReceiptCorrection.Items.Add( new GarmentReceiptCorrectionItem { DODetailId = detail.Id, EPOItemId = detail.EPOItemId, POItemId = detail.POItemId, PricePerDealUnit = (double)detail.PricePerDealUnit, PRItemId = detail.PRItemId, Conversion = (double)detail.Conversion, POSerialNumber = detail.POSerialNumber, RONo = detail.RONo, ProductId = detail.ProductId, ProductCode = detail.ProductCode, ProductName = detail.ProductName, Quantity = (double)detail.ReceiptCorrection, UomId = Convert.ToInt32(detail.UomId), UomUnit = detail.UomUnit, DesignColor = detail.DesignColor, ProductRemark = detail.ProductRemark, SmallQuantity = (double)detail.SmallQuantity, SmallUomId = detail.SmallUomId, SmallUomUnit = detail.SmallUomUnit, URNItemId = detail.Id }); } return(garmentReceiptCorrection, garmentUnitReceiptNote); }
private GarmentInventoryDocument GenerateGarmentInventoryDocumentConv(GarmentReceiptCorrection garmentReceiptCorrection, string type) { var garmentInventoryDocument = new GarmentInventoryDocument { Items = new List <GarmentInventoryDocumentItem>() }; EntityExtension.FlagForCreate(garmentInventoryDocument, identityService.Username, USER_AGENT); do { garmentInventoryDocument.No = CodeGenerator.Generate(); }while (dbSetGarmentInventoryDocument.Any(m => m.No == garmentInventoryDocument.No)); garmentInventoryDocument.ReferenceNo = garmentReceiptCorrection.CorrectionNo; garmentInventoryDocument.ReferenceType = string.Concat("Koreksi Bon - ", garmentReceiptCorrection.UnitName); garmentInventoryDocument.Type = type; garmentInventoryDocument.Date = DateTime.Now; garmentInventoryDocument.StorageId = garmentReceiptCorrection.StorageId; garmentInventoryDocument.StorageCode = garmentReceiptCorrection.StorageCode; garmentInventoryDocument.StorageName = garmentReceiptCorrection.StorageName; garmentInventoryDocument.Remark = garmentReceiptCorrection.Remark; foreach (var garmentReceiptCorrectionItem in garmentReceiptCorrection.Items) { var garmentInventoryDocumentItem = new GarmentInventoryDocumentItem(); EntityExtension.FlagForCreate(garmentInventoryDocumentItem, identityService.Username, USER_AGENT); garmentInventoryDocumentItem.ProductId = garmentReceiptCorrectionItem.ProductId; garmentInventoryDocumentItem.ProductCode = garmentReceiptCorrectionItem.ProductCode; garmentInventoryDocumentItem.ProductName = garmentReceiptCorrectionItem.ProductName; garmentInventoryDocumentItem.Quantity = garmentReceiptCorrectionItem.SmallQuantity >= 0 ? (decimal)garmentReceiptCorrectionItem.SmallQuantity : (decimal)garmentReceiptCorrectionItem.SmallQuantity * (-1); garmentInventoryDocumentItem.UomId = garmentReceiptCorrectionItem.SmallUomId; garmentInventoryDocumentItem.UomUnit = garmentReceiptCorrectionItem.SmallUomUnit; garmentInventoryDocumentItem.ProductRemark = garmentReceiptCorrectionItem.ProductRemark; garmentInventoryDocument.Items.Add(garmentInventoryDocumentItem); } return(garmentInventoryDocument); }
private GarmentInventoryMovement GenerateGarmentInventoryMovement(GarmentReceiptCorrection garmentReceiptCorrection, GarmentReceiptCorrectionItem garmentReceiptCorrectionItem, GarmentInventorySummary garmentInventorySummary, string type) { var garmentInventoryMovement = new GarmentInventoryMovement(); EntityExtension.FlagForCreate(garmentInventoryMovement, identityService.Username, USER_AGENT); do { garmentInventoryMovement.No = CodeGenerator.Generate(); }while (dbSetGarmentInventoryMovement.Any(m => m.No == garmentInventoryMovement.No)); garmentInventoryMovement.Date = garmentInventoryMovement.CreatedUtc; garmentInventoryMovement.ReferenceNo = garmentReceiptCorrection.CorrectionNo; garmentInventoryMovement.ReferenceType = string.Concat("Koreksi Bon - ", garmentReceiptCorrection.UnitName); garmentInventoryMovement.ProductId = garmentReceiptCorrectionItem.ProductId; garmentInventoryMovement.ProductCode = garmentReceiptCorrectionItem.ProductCode; garmentInventoryMovement.ProductName = garmentReceiptCorrectionItem.ProductName; garmentInventoryMovement.StorageId = garmentReceiptCorrection.StorageId; garmentInventoryMovement.StorageCode = garmentReceiptCorrection.StorageCode; garmentInventoryMovement.StorageName = garmentReceiptCorrection.StorageName; garmentInventoryMovement.StockPlanning = 0; garmentInventoryMovement.Before = garmentInventorySummary == null ? 0 : garmentInventorySummary.Quantity; garmentInventoryMovement.Quantity = (type ?? "").ToUpper() == "OUT" && garmentReceiptCorrectionItem.SmallQuantity > 0 ? (decimal)garmentReceiptCorrectionItem.SmallQuantity * (-1) : (decimal)garmentReceiptCorrectionItem.SmallQuantity; garmentInventoryMovement.After = garmentInventoryMovement.Before + garmentInventoryMovement.Quantity; garmentInventoryMovement.UomId = garmentReceiptCorrectionItem.SmallUomId; garmentInventoryMovement.UomUnit = garmentReceiptCorrectionItem.SmallUomUnit; garmentInventoryMovement.Remark = garmentReceiptCorrectionItem.ProductRemark; garmentInventoryMovement.Type = type; return(garmentInventoryMovement); }
async Task <string> GenerateNo(GarmentReceiptCorrection model, int clientTimeZoneOffset) { DateTimeOffset dateTimeOffsetNow = DateTimeOffset.Now; string Month = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("MM"); string Year = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("yy"); string Day = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd"); string no = $"CB{Year}{Month}{Day}"; int Padding = 4; var lastNo = await this.dbSet.Where(w => w.CorrectionNo.StartsWith(no) && !w.IsDeleted).OrderByDescending(o => o.CorrectionNo).FirstOrDefaultAsync(); if (lastNo == null) { return(no + "1".PadLeft(Padding, '0')); } else { //int lastNoNumber = Int32.Parse(lastNo.INNo.Replace(no, "")) + 1; int.TryParse(lastNo.CorrectionNo.Replace(no, ""), out int lastno1); int lastNoNumber = lastno1 + 1; return(no + lastNoNumber.ToString().PadLeft(Padding, '0')); } }
public async Task <int> Create(GarmentReceiptCorrection m, string user, int clientTimeZoneOffset = 7) { int Created = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(m, user, USER_AGENT); m.CorrectionNo = await GenerateNo(m, clientTimeZoneOffset); m.CorrectionDate = DateTimeOffset.Now; if (m.CorrectionType == "Konversi") { GarmentReceiptCorrection outCorrection = new GarmentReceiptCorrection { CorrectionDate = m.CorrectionDate, CorrectionNo = m.CorrectionNo, Remark = m.Remark, StorageCode = m.StorageCode, StorageId = m.StorageId, StorageName = m.StorageName, CorrectionType = m.CorrectionType, UnitCode = m.UnitCode, UnitName = m.UnitName, UnitId = m.UnitId, URNId = m.URNId, URNNo = m.URNNo, }; List <GarmentReceiptCorrectionItem> itemsOut = new List <GarmentReceiptCorrectionItem>(); foreach (var outs in m.Items) { GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.FirstOrDefault(a => a.Id == outs.URNItemId); double SmallQuantityOut = (double)garmentUnitReceiptNoteItem.ReceiptCorrection * (double)garmentUnitReceiptNoteItem.CorrectionConversion; GarmentReceiptCorrectionItem outItem = new GarmentReceiptCorrectionItem { PricePerDealUnit = outs.PricePerDealUnit, POItemId = outs.POItemId, Conversion = outs.Conversion, SmallQuantity = SmallQuantityOut, DODetailId = outs.DODetailId, ProductCode = outs.ProductCode, ProductId = outs.ProductId, POSerialNumber = outs.POSerialNumber, ProductName = outs.ProductName, PRItemId = outs.PRItemId, ProductRemark = outs.ProductRemark, Quantity = outs.Quantity, CorrectionConversion = outs.CorrectionConversion, CorrectionId = outs.CorrectionId, CorrectionQuantity = outs.CorrectionQuantity, DesignColor = outs.DesignColor, EPOItemId = outs.EPOItemId, RONo = outs.RONo, SmallUomId = outs.SmallUomId, SmallUomUnit = outs.SmallUomUnit, UomId = outs.UomId, UomUnit = outs.UomUnit, URNItemId = outs.URNItemId }; itemsOut.Add(outItem); var garmentInventorySummaryExistingOut = dbSetGarmentInventorySummary.SingleOrDefault(s => s.ProductId == outItem.ProductId && s.StorageId == outCorrection.StorageId && s.UomId == outItem.SmallUomId); var garmentInventoryMovementOut = GenerateGarmentInventoryMovement(outCorrection, outItem, garmentInventorySummaryExistingOut, "OUT"); dbSetGarmentInventoryMovement.Add(garmentInventoryMovementOut); if (garmentInventorySummaryExistingOut == null) { var garmentInventorySummaryOut = GenerateGarmentInventorySummary(outCorrection, outItem, garmentInventoryMovementOut); dbSetGarmentInventorySummary.Add(garmentInventorySummaryOut); } else { EntityExtension.FlagForUpdate(garmentInventorySummaryExistingOut, identityService.Username, USER_AGENT); garmentInventorySummaryExistingOut.Quantity = garmentInventoryMovementOut.After; } await dbContext.SaveChangesAsync(); } outCorrection.Items = itemsOut; var invOut = GenerateGarmentInventoryDocumentConv(outCorrection, "OUT"); dbSetGarmentInventoryDocument.Add(invOut); } var type = "IN"; foreach (var item in m.Items) { GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.FirstOrDefault(a => a.Id == item.URNItemId); GarmentDOItems garmentDOItems = dbContext.GarmentDOItems.SingleOrDefault(x => x.URNItemId == item.URNItemId); if (item.CorrectionQuantity < 0) { type = "OUT"; } if (m.CorrectionType == "Jumlah") { item.CorrectionConversion = 0; garmentUnitReceiptNoteItem.ReceiptCorrection += (decimal)item.CorrectionQuantity; var garmentInventoryDocument = GenerateGarmentInventoryDocument(m, item, type); dbSetGarmentInventoryDocument.Add(garmentInventoryDocument); if (garmentDOItems != null) { garmentDOItems.RemainingQuantity += (decimal)item.SmallQuantity; } } else { //decimal qty = (garmentUnitReceiptNoteItem.ReceiptCorrection - (garmentUnitReceiptNoteItem.OrderQuantity / garmentUnitReceiptNoteItem.CorrectionConversion))* garmentUnitReceiptNoteItem.CorrectionConversion; //decimal newQty = (garmentUnitReceiptNoteItem.ReceiptCorrection - (garmentUnitReceiptNoteItem.OrderQuantity / garmentUnitReceiptNoteItem.CorrectionConversion)) * (decimal)item.CorrectionConversion; //decimal diff = (newQty - qty)/(decimal)item.CorrectionConversion; item.SmallQuantity = (double)garmentUnitReceiptNoteItem.ReceiptCorrection * item.CorrectionConversion; //garmentUnitReceiptNoteItem.ReceiptCorrection += diff; garmentUnitReceiptNoteItem.CorrectionConversion = (decimal)item.CorrectionConversion; if (garmentDOItems != null) { garmentDOItems.RemainingQuantity = garmentDOItems.RemainingQuantity + ((garmentUnitReceiptNoteItem.CorrectionConversion * garmentUnitReceiptNoteItem.ReceiptCorrection) - garmentDOItems.RemainingQuantity); } } EntityExtension.FlagForCreate(item, user, USER_AGENT); var garmentInventorySummaryExisting = dbSetGarmentInventorySummary.SingleOrDefault(s => s.ProductId == item.ProductId && s.StorageId == m.StorageId && s.UomId == item.SmallUomId); var garmentInventoryMovement = GenerateGarmentInventoryMovement(m, item, garmentInventorySummaryExisting, type); dbSetGarmentInventoryMovement.Add(garmentInventoryMovement); if (garmentInventorySummaryExisting == null) { var garmentInventorySummary = GenerateGarmentInventorySummary(m, item, garmentInventoryMovement); dbSetGarmentInventorySummary.Add(garmentInventorySummary); } else { EntityExtension.FlagForUpdate(garmentInventorySummaryExisting, identityService.Username, USER_AGENT); garmentInventorySummaryExisting.Quantity = garmentInventoryMovement.After; } await dbContext.SaveChangesAsync(); } if (m.CorrectionType != "Jumlah") { var garmentInventoryDocumentConv = GenerateGarmentInventoryDocumentConv(m, type); dbSetGarmentInventoryDocument.Add(garmentInventoryDocumentConv); } this.dbSet.Add(m); Created = await dbContext.SaveChangesAsync(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }