public IActionResult Post([FromBody] CustomsFormDto form) { try { VerifyUser(); var id = _service.CreateFromCustoms(form); var result = new ResultFormatter(ApiVersion, General.CREATED_STATUS_CODE, General.OK_MESSAGE).Ok(); return(Created(string.Concat(Request.Path, "/", id), result)); } catch (Exception e) { var result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, result)); } }
public async Task <int> Create(GarmentBeacukai model, string username, int clientTimeZoneOffset = 7) { int Created = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(model, username, USER_AGENT); var lastPaymentBill = GeneratePaymentBillNo(); foreach (GarmentBeacukaiItem item in model.Items) { GarmentDeliveryOrder deliveryOrder = dbSetDeliveryOrder.Include(m => m.Items) .ThenInclude(i => i.Details).FirstOrDefault(s => s.Id == item.GarmentDOId); if (deliveryOrder != null) { if (model.BillNo == "" | model.BillNo == null) { deliveryOrder.BillNo = GenerateBillNo(); } else { deliveryOrder.BillNo = model.BillNo; } deliveryOrder.PaymentBill = string.Concat(lastPaymentBill.format, (lastPaymentBill.counterId++).ToString("D3")); //deliveryOrder.CustomsId = model.Id; double qty = 0; foreach (var deliveryOrderItem in deliveryOrder.Items) { foreach (var detail in deliveryOrderItem.Details) { qty += detail.DOQuantity; } } item.TotalAmount = Convert.ToDecimal(deliveryOrder.TotalAmount); item.TotalQty = qty; EntityExtension.FlagForCreate(item, username, USER_AGENT); } } this.dbSet.Add(model); Created = await dbContext.SaveChangesAsync(); transaction.Commit(); foreach (GarmentBeacukaiItem item in model.Items) { GarmentDeliveryOrder deliveryOrder = dbSetDeliveryOrder.Include(m => m.Items) .ThenInclude(i => i.Details).FirstOrDefault(s => s.Id == item.GarmentDOId); if (deliveryOrder != null) { deliveryOrder.CustomsId = model.Id; } } Created = await dbContext.SaveChangesAsync(); foreach (var item in model.Items) { var deliveryOrder = dbSetDeliveryOrder .Include(m => m.Items) .ThenInclude(i => i.Details) .FirstOrDefault(s => s.Id == item.GarmentDOId); var deliveryOrderEPOIds = deliveryOrder.Items.Select(s => s.EPOId); var garmentExternalOrder = dbContext.GarmentExternalPurchaseOrders.Where(s => deliveryOrderEPOIds.Contains(s.Id)); if (deliveryOrder != null) { var dppAmount = 0.0; var currencyDPPAmount = 0.0; if (deliveryOrder.DOCurrencyCode == "IDR") { dppAmount = deliveryOrder.TotalAmount; } else { currencyDPPAmount = deliveryOrder.TotalAmount; dppAmount = deliveryOrder.TotalAmount * deliveryOrder.DOCurrencyRate.GetValueOrDefault(); } //var categories = deliveryOrder.Items.SelectMany(doItem => doItem.Details).Select(detail => detail.CodeRequirment); var categories = string.Join(',', garmentExternalOrder.Select(s => s.Category).ToList().GroupBy(s => s).Select(s => s.Key)); var paymentMethod = garmentExternalOrder.FirstOrDefault().PaymentType; var productNames = string.Join(", ", deliveryOrder.Items.SelectMany(doItem => doItem.Details).Select(doDetail => doDetail.ProductName).ToList()); await _garmentDebtBalanceService.CreateFromCustoms(new CustomsFormDto(0, string.Join("\n", categories), deliveryOrder.BillNo, deliveryOrder.PaymentBill, (int)deliveryOrder.Id, deliveryOrder.DONo, (int)model.SupplierId, model.SupplierCode, model.SupplierName, deliveryOrder.SupplierIsImport, (int)deliveryOrder.DOCurrencyId.GetValueOrDefault(), deliveryOrder.DOCurrencyCode, deliveryOrder.DOCurrencyRate.GetValueOrDefault(), productNames, deliveryOrder.ArrivalDate, dppAmount, currencyDPPAmount, paymentMethod)); } } } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }