public async Task <int> Create(ExternalPurchaseOrder m, string user, int clientTimeZoneOffset) { int Created = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(m, user, "Facade"); m.EPONo = await GenerateNo(m, clientTimeZoneOffset); foreach (var item in m.Items) { EntityExtension.FlagForCreate(item, user, "Facade"); foreach (var detail in item.Details) { detail.PricePerDealUnit = detail.IncludePpn ? (100 * detail.PriceBeforeTax) / 110 : detail.PriceBeforeTax; //PurchaseRequestItem purchaseRequestItem = this.dbContext.PurchaseRequestItems.FirstOrDefault(s => s.Id == detail.PRItemId); //purchaseRequestItem.Status = "Sudah diorder ke Supplier"; EntityExtension.FlagForCreate(detail, user, "Facade"); InternalPurchaseOrderItem internalPurchaseOrderItem = this.dbContext.InternalPurchaseOrderItems.FirstOrDefault(s => s.Id == detail.POItemId); internalPurchaseOrderItem.Status = "Sudah dibuat PO Eksternal"; } InternalPurchaseOrder internalPurchaseOrder = this.dbContext.InternalPurchaseOrders.FirstOrDefault(s => s.Id == item.POId); internalPurchaseOrder.IsPosted = true; } this.dbSet.Add(m); Created = await dbContext.SaveChangesAsync(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }
public async Task <ExternalPurchaseOrderViewModel> GetNewDataViewModel(string user) { InternalPurchaseOrder internalPurchaseOrder = await internalPurchaseOrderDataUtil.GetTestData(user); return(new ExternalPurchaseOrderViewModel { unit = new UnitViewModel { _id = internalPurchaseOrder.UnitId, code = internalPurchaseOrder.UnitCode, name = internalPurchaseOrder.UnitName, division = new DivisionViewModel { _id = internalPurchaseOrder.DivisionId, code = internalPurchaseOrder.DivisionCode, name = internalPurchaseOrder.DivisionName, } }, currency = new CurrencyViewModel { code = "CurrencyCode", _id = "CurrencyId", rate = 0.5, }, freightCostBy = "test", deliveryDate = DateTime.Now.AddDays(1), orderDate = DateTime.Now, supplier = new SupplierViewModel { code = "sup", _id = "supId", name = "Supplier", }, paymentMethod = "test", poCashType = "test", remark = "Remark", items = new List <ExternalPurchaseOrderItemViewModel> { externalPurchaseOrderItemDataUtil.GetNewDataViewModel(internalPurchaseOrder) } }); }
public async Task Should_Error_Update_Data_when_Quantity_is_same() { InternalPurchaseOrder model = await DataUtil.GetTestData("dev2"); var responseGetById = await this.Client.GetAsync($"{URI}/{model.Id}"); var json = responseGetById.Content.ReadAsStringAsync().Result; Dictionary <string, object> result = JsonConvert.DeserializeObject <Dictionary <string, object> >(json.ToString()); Assert.True(result.ContainsKey("apiVersion")); Assert.True(result.ContainsKey("message")); Assert.True(result.ContainsKey("data")); Assert.True(result["data"].GetType().Name.Equals("JObject")); InternalPurchaseOrderViewModel viewModel = JsonConvert.DeserializeObject <InternalPurchaseOrderViewModel>(result.GetValueOrDefault("data").ToString()); var response = await this.Client.PutAsync($"{URI}/{model.Id}", new StringContent(JsonConvert.SerializeObject(viewModel).ToString(), Encoding.UTF8, MediaType)); Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); }
public async Task <int> Update(int id, InternalPurchaseOrder internalPurchaseOrder, string user) { int Updated = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { var m = this.dbSet.AsNoTracking() .Include(d => d.Items) .Single(pr => pr.Id == id && !pr.IsDeleted); if (m != null) { EntityExtension.FlagForUpdate(internalPurchaseOrder, user, "Facade"); foreach (var item in internalPurchaseOrder.Items) { EntityExtension.FlagForUpdate(item, user, "Facade"); } this.dbContext.Update(internalPurchaseOrder); Updated = await dbContext.SaveChangesAsync(); transaction.Commit(); } else { throw new Exception("Error while updating data"); } } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Updated); }
public async Task Should_Error_Split_Data_When_Quantity_Splited_Bigger_than_Quantity_Before_Splited() { InternalPurchaseOrder model = await DataUtil.GetTestData("dev2"); InternalPurchaseOrderViewModel viewModel = await DataUtil.GetNewDataViewModel("dev2"); viewModel.prNo = null; viewModel.prDate = DateTimeOffset.MinValue; viewModel.budget = null; viewModel.unit = null; viewModel.category = null; foreach (var items in viewModel.items) { items._id = 0; items.quantity = items.quantity + items.quantity; } //List<InternalPurchaseOrderViewModel> viewModelList = new List<InternalPurchaseOrderViewModel> { viewModel }; var response = await this.Client.PostAsync($"{URI}/spliting/{viewModel._id}", new StringContent(JsonConvert.SerializeObject(viewModel).ToString(), Encoding.UTF8, MediaType)); Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); }
public int EPOClose(int id, string user) { int Updated = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { var m = this.dbSet .Include(d => d.Items) .ThenInclude(d => d.Details) .SingleOrDefault(epo => epo.Id == id && !epo.IsDeleted); EntityExtension.FlagForUpdate(m, user, "Facade"); m.IsClosed = true; foreach (var item in m.Items) { EntityExtension.FlagForUpdate(item, user, "Facade"); foreach (var detail in item.Details) { EntityExtension.FlagForUpdate(detail, user, "Facade"); } InternalPurchaseOrder internalPurchaseOrder = this.dbContext.InternalPurchaseOrders.FirstOrDefault(s => s.Id == item.POId); internalPurchaseOrder.IsClosed = true; } Updated = dbContext.SaveChanges(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Updated); }
public IActionResult Get(int id) { try { InternalPurchaseOrder model = _facade.ReadById(id); InternalPurchaseOrderViewModel viewModel = _mapper.Map <InternalPurchaseOrderViewModel>(model); return(Ok(new { apiVersion = ApiVersion, statusCode = General.OK_STATUS_CODE, message = General.OK_MESSAGE, data = viewModel, })); } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public ExternalPurchaseOrderItem GetNewData(InternalPurchaseOrder internalPurchaseOrder) { List <InternalPurchaseOrderItem> detail = new List <InternalPurchaseOrderItem>(); foreach (var POdetail in internalPurchaseOrder.Items) { detail.Add(POdetail); } return(new ExternalPurchaseOrderItem { POId = internalPurchaseOrder.Id, PRId = Convert.ToInt64(internalPurchaseOrder.PRId), PONo = internalPurchaseOrder.PONo, PRNo = internalPurchaseOrder.PRNo, UnitCode = "unitcode", UnitName = "unit", UnitId = "unitId", Details = new List <ExternalPurchaseOrderDetail> { externalPurchaseOrderDetailDataUtil.GetNewData(detail) } }); }
public async Task <IActionResult> Post([FromBody] InternalPurchaseOrderViewModel vm) { identityService.Token = Request.Headers["Authorization"].First().Replace("Bearer ", ""); identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value; InternalPurchaseOrder m = _mapper.Map <InternalPurchaseOrder>(vm); ValidateService validateService = (ValidateService)_facade.serviceProvider.GetService(typeof(ValidateService)); try { validateService.Validate(vm); int result = await _facade.Create(m, identityService.Username); if (result.Equals(0)) { return(StatusCode(500)); } else { return(Created(Request.Path, result)); } } catch (ServiceValidationExeption e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.BAD_REQUEST_STATUS_CODE, General.BAD_REQUEST_MESSAGE) .Fail(e); return(BadRequest(Result)); } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public async Task <int> Update(int id, ExternalPurchaseOrder externalPurchaseOrder, string user) { int Updated = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { var existingModel = this.dbSet.AsNoTracking() .Include(d => d.Items) .ThenInclude(d => d.Details) .Single(epo => epo.Id == id && !epo.IsDeleted); if (existingModel != null && id == externalPurchaseOrder.Id) { EntityExtension.FlagForUpdate(externalPurchaseOrder, user, "Facade"); if (externalPurchaseOrder.UseIncomeTax == false) { externalPurchaseOrder.IncomeTaxBy = ""; } foreach (var item in externalPurchaseOrder.Items.ToList()) { var existingItem = existingModel.Items.SingleOrDefault(m => m.Id == item.Id); List <ExternalPurchaseOrderItem> duplicateExternalPurchaseOrderItems = externalPurchaseOrder.Items.Where(i => i.POId == item.POId && i.Id != item.Id).ToList(); if (item.Id == 0) { if (duplicateExternalPurchaseOrderItems.Count <= 0) { EntityExtension.FlagForCreate(item, user, "Facade"); foreach (var detail in item.Details) { detail.PricePerDealUnit = detail.IncludePpn ? (100 * detail.PriceBeforeTax) / 110 : detail.PriceBeforeTax; EntityExtension.FlagForCreate(detail, user, "Facade"); //PurchaseRequestItem purchaseRequestItem = this.dbContext.PurchaseRequestItems.FirstOrDefault(s => s.Id == detail.PRItemId); //purchaseRequestItem.Status = "Sudah diorder ke Supplier"; InternalPurchaseOrderItem internalPurchaseOrderItem = this.dbContext.InternalPurchaseOrderItems.FirstOrDefault(s => s.Id == detail.POItemId); internalPurchaseOrderItem.Status = "Sudah dibuat PO Eksternal"; } InternalPurchaseOrder internalPurchaseOrder = this.dbContext.InternalPurchaseOrders.FirstOrDefault(s => s.Id == item.POId); internalPurchaseOrder.IsPosted = true; } } else { EntityExtension.FlagForUpdate(item, user, "Facade"); if (duplicateExternalPurchaseOrderItems.Count > 0) { foreach (var detail in item.Details.ToList()) { if (detail.Id != 0) { EntityExtension.FlagForUpdate(detail, user, "Facade"); foreach (var duplicateItem in duplicateExternalPurchaseOrderItems.ToList()) { foreach (var duplicateDetail in duplicateItem.Details.ToList()) { if (detail.ProductId.Equals(duplicateDetail.ProductId)) { detail.PricePerDealUnit = detail.IncludePpn ? (100 * detail.PriceBeforeTax) / 110 : detail.PriceBeforeTax; } else if (item.Details.Count(d => d.ProductId.Equals(duplicateDetail.ProductId)) < 1) { EntityExtension.FlagForCreate(duplicateDetail, user, "Facade"); item.Details.Add(duplicateDetail); duplicateDetail.PricePerDealUnit = duplicateDetail.IncludePpn ? (100 * duplicateDetail.PriceBeforeTax) / 110 : duplicateDetail.PriceBeforeTax; //PurchaseRequestItem purchaseRequestItem = this.dbContext.PurchaseRequestItems.FirstOrDefault(s => s.Id == detail.PRItemId); //purchaseRequestItem.Status = "Sudah diorder ke Supplier"; InternalPurchaseOrderItem internalPurchaseOrderItem = this.dbContext.InternalPurchaseOrderItems.FirstOrDefault(s => s.Id == detail.POItemId); internalPurchaseOrderItem.Status = "Sudah dibuat PO Eksternal"; } } externalPurchaseOrder.Items.Remove(duplicateItem); } } } } else { foreach (var detail in item.Details) { if (detail.Id != 0) { EntityExtension.FlagForUpdate(detail, user, "Facade"); detail.PricePerDealUnit = detail.IncludePpn ? (100 * detail.PriceBeforeTax) / 110 : detail.PriceBeforeTax; } } } } } this.dbContext.Update(externalPurchaseOrder); foreach (var existingItem in existingModel.Items) { var newItem = externalPurchaseOrder.Items.FirstOrDefault(i => i.Id == existingItem.Id); if (newItem == null) { EntityExtension.FlagForDelete(existingItem, user, "Facade"); InternalPurchaseOrder internalPurchaseOrder = this.dbContext.InternalPurchaseOrders.FirstOrDefault(s => s.Id == existingItem.POId); internalPurchaseOrder.IsPosted = false; this.dbContext.ExternalPurchaseOrderItems.Update(existingItem); foreach (var existingDetail in existingItem.Details) { EntityExtension.FlagForDelete(existingDetail, user, "Facade"); //PurchaseRequestItem purchaseRequestItem = this.dbContext.PurchaseRequestItems.FirstOrDefault(s => s.Id == existingDetail.PRItemId); //purchaseRequestItem.Status = "Sudah diterima Pembelian"; existingDetail.PricePerDealUnit = existingDetail.IncludePpn ? (100 * existingDetail.PriceBeforeTax) / 110 : existingDetail.PriceBeforeTax; InternalPurchaseOrderItem internalPurchaseOrderItem = this.dbContext.InternalPurchaseOrderItems.FirstOrDefault(s => s.Id == existingDetail.POItemId); internalPurchaseOrderItem.Status = "PO Internal belum diorder"; this.dbContext.ExternalPurchaseOrderDetails.Update(existingDetail); } } else { foreach (var existingDetail in existingItem.Details) { var newDetail = newItem.Details.FirstOrDefault(d => d.Id == existingDetail.Id); if (newDetail == null) { EntityExtension.FlagForDelete(existingDetail, user, "Facade"); //PurchaseRequestItem purchaseRequestItem = this.dbContext.PurchaseRequestItems.FirstOrDefault(s => s.Id == existingDetail.PRItemId); //purchaseRequestItem.Status = "Sudah diterima Pembelian"; existingDetail.PricePerDealUnit = existingDetail.IncludePpn ? (100 * existingDetail.PriceBeforeTax) / 110 : existingDetail.PriceBeforeTax; InternalPurchaseOrderItem internalPurchaseOrderItem = this.dbContext.InternalPurchaseOrderItems.FirstOrDefault(s => s.Id == existingDetail.POItemId); internalPurchaseOrderItem.Status = "PO Internal belum diorder"; this.dbContext.ExternalPurchaseOrderDetails.Update(existingDetail); } } } } Updated = await dbContext.SaveChangesAsync(); transaction.Commit(); } else { throw new Exception("Error"); } } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Updated); }
public async Task <ExternalPurchaseOrder> GetNewData(string user) { InternalPurchaseOrder internalPurchaseOrder = await internalPurchaseOrderDataUtil.GetTestData(user); //List<ExternalPurchaseOrderDetail> detail = new List<ExternalPurchaseOrderDetail>(); //foreach (var POdetail in internalPurchaseOrder.Items) //{ // detail.Add(new ExternalPurchaseOrderDetail // { // POItemId = POdetail.Id, // PRItemId = Convert.ToInt64(POdetail.PRItemId), // ProductId = "ProductId", // ProductCode = "ProductCode", // ProductName = "ProductName", // DefaultQuantity = 10, // DealUomId = "UomId", // DealUomUnit = "Uom", // ProductRemark = "Remark", // PriceBeforeTax = 1000, // PricePerDealUnit = 200, // DealQuantity = POdetail.Quantity // }); //} //List<ExternalPurchaseOrderItem> items = new List<ExternalPurchaseOrderItem>(); //items.Add(new ExternalPurchaseOrderItem //{ // POId = internalPurchaseOrder.Id, // PRId = Convert.ToInt64(internalPurchaseOrder.PRId), // PONo = internalPurchaseOrder.PONo, // PRNo = internalPurchaseOrder.PRNo, // UnitCode = "unitcode", // UnitName = "unit", // UnitId = "unitId", // Details = detail //}); return(new ExternalPurchaseOrder { CurrencyCode = "CurrencyCode", CurrencyId = "CurrencyId", CurrencyRate = 0.5, UnitId = "UnitId", UnitCode = "UnitCode", UnitName = "UnitName", DivisionId = "DivisionId", DivisionCode = "DivisionCode", DivisionName = "DivisionName", FreightCostBy = "test", DeliveryDate = DateTime.Now.AddDays(1), OrderDate = DateTime.Now, SupplierCode = "sup", SupplierId = "supId", IncomeTaxName = "Final", IncomeTaxRate = "1.5", UseIncomeTax = true, SupplierName = "Supplier", PaymentMethod = "test", Remark = "Remark", Items = new List <ExternalPurchaseOrderItem> { externalPurchaseOrderItemDataUtil.GetNewData(internalPurchaseOrder) } }); }
public async Task <int> Split(int id, InternalPurchaseOrder internalPurchaseOrder, string user) { int Splitted = 0; InternalPurchaseOrder UpdateData = ReadByIdforSplit(id); using (var transaction = this.dbContext.Database.BeginTransaction()) { try { var m = this.dbSet.AsNoTracking() .Include(d => d.Items) .Single(pr => pr.Id == id && !pr.IsDeleted); if (m != null) { var poNoTemp = m.PONo; EntityExtension.FlagForUpdate(UpdateData, user, "Facade"); EntityExtension.FlagForCreate(internalPurchaseOrder, user, "Facade"); foreach (var itemUpdate in UpdateData.Items) { foreach (var item in internalPurchaseOrder.Items) { if (item.ProductId == itemUpdate.ProductId) { if (item.Quantity <= itemUpdate.Quantity) { EntityExtension.FlagForUpdate(itemUpdate, user, "Facade"); itemUpdate.Quantity = itemUpdate.Quantity - item.Quantity; EntityExtension.FlagForCreate(item, user, "Facade"); item.Id = 0; item.POId = 0; } } } } internalPurchaseOrder.Id = 0; internalPurchaseOrder.PONo = await this.GeneratePONo(UpdateData); internalPurchaseOrder.Active = UpdateData.Active; internalPurchaseOrder.BudgetCode = UpdateData.BudgetCode; internalPurchaseOrder.BudgetId = UpdateData.BudgetId; internalPurchaseOrder.BudgetName = UpdateData.BudgetName; internalPurchaseOrder.CategoryCode = UpdateData.CategoryCode; internalPurchaseOrder.CategoryId = UpdateData.CategoryId; internalPurchaseOrder.CategoryName = UpdateData.CategoryName; internalPurchaseOrder.DivisionCode = UpdateData.DivisionCode; internalPurchaseOrder.DivisionId = UpdateData.DivisionId; internalPurchaseOrder.UId = UpdateData.UId; internalPurchaseOrder.UnitCode = UpdateData.UnitCode; internalPurchaseOrder.UnitId = UpdateData.UnitId; UpdateData.PONo = poNoTemp; this.dbContext.InternalPurchaseOrders.Add(internalPurchaseOrder); this.dbContext.Update(UpdateData); Splitted = await dbContext.SaveChangesAsync(); transaction.Commit(); } } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Splitted); }