public async Task <ActionResult <Response <List <Preparer> > > > GetPreparers() { logger.LogInformation("GET preparadores invocado"); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.Preparers.ToListAsync())); }
public async Task <ActionResult <Response <List <PurchaseOrderHeader> > > > GetOrdersByProvider(int code) { logger.LogInformation("GET proveedor/{code} invocado con code " + code); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.PurchaseOrdersHeaders.Where(o => o.ProviderCode == code && o.Situation == 1).ToListAsync())); }
public async Task <ActionResult <Response <List <RequestDetails> > > > GetRequestDetails(int prefixDoc, int doc, int suffixDoc) { logger.LogInformation("GET detalle/{prefijo}/{doc}/{sufijo} invocado con prefijo " + prefixDoc + ", doc " + doc + " y sufijo " + suffixDoc); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var requestDetails = await potigianContext.RequestDetails .Where(req => req.DocumentPrefix == prefixDoc && req.DocumentCode == doc && req.DocumentSuffix == suffixDoc) .Join( potigianContext.Articles, req => req.ArticleCode, article => article.Code, (req, article) => req.Append(article)) .ToListAsync(); foreach (var req in requestDetails) { var value = await potigianContext.BranchArticles.FirstOrDefaultAsync(a => a.ArticleCode == req.ArticleCode); if (value.ArticleCode == null || value.ArticleCode == 0) { value.ArticleCode = 1; } req.Append(value); } return requestDetails; })); }
public async Task <ActionResult <Response <List <RequestDetails> > > > GetRequestsDetails() { logger.LogInformation("GET detalle invocado"); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.RequestDetails.ToListAsync())); }
public async Task <ActionResult <Response <bool> > > ClearAssignedRequestsFromPreparer(int preparer) { logger.LogInformation("POST cabe/asignados/{preparador}/clear invocado con preparador " + preparer); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var assignedRequests = await potigianContext.RequestHeaders .Where(req => (req.PreparerCode == preparer.ToString() || req.PreparerCode == $"CSPRP{preparer}") && req.SituationCode == Config.Requests.StateInPreparation) .ToListAsync(); assignedRequests.ForEach(r => { r.SituationCode = Config.Requests.StateAvailableToPrepare; r.SituationDate = DateTime.Now; r.PreparerCode = null; potigianContext.Update(r); }); await potigianContext.SaveChangesAsync(); return true; })); }
public async Task <ActionResult <Response <List <RequestHeaders> > > > GetRequestsHeadersByPreparer(int preparer) { logger.LogInformation("GET cabe/asignados/{preparador} invocado con preparador " + preparer); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.RequestHeaders .Where(h => (h.PreparerCode == preparer.ToString() || h.PreparerCode == $"CSPRP{preparer}") && h.SituationCode == Config.Requests.StateInPreparation) .ToListAsync())); }
public async Task <ActionResult <Response <List <RequestHeaders> > > > GetRequestsHeadersBySituation(int situation) { logger.LogInformation("GET cabe/situacion/{code} invocado con code " + situation); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.RequestHeaders .Where(h => h.SituationCode == situation) .ToListAsync())); }
public async Task <ActionResult <Response <bool> > > StartRequest(int prefixDoc, int doc, int suffixDoc, int preparer) { logger.LogInformation("POST cabe/asignados/{prefijo}/{doc}/{sufijo}/start/{preparador} invocado con prefijo " + prefixDoc + ", doc " + doc + ", sufijo " + suffixDoc + " y preparador " + preparer); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var requestPreparations = potigianContext.RequestPreparations.Where(rp => rp.DocumentSuffix == suffixDoc); if (await requestPreparations.CountAsync() == 0) // new entry { var preparation = new RequestPreparation { Code = preparer.ToString(), DocumentSuffix = suffixDoc, InsertDate = DateTime.Now, StartDate = DateTime.Now, StatusCode = Config.Requests.StateInPreparation, EndDate = null, }; potigianContext.Add(preparation); potigianContext.Add(PreparerProductivity.FromPreparation(preparation)); await potigianContext.SaveChangesAsync(); } else { try { var preparation = await requestPreparations.FirstAsync(); if (preparation.StartDate == null) { preparation.Code = preparer.ToString(); preparation.StartDate = DateTime.Now; preparation.EndDate = null; preparation.StatusCode = Config.Requests.StateInPreparation; potigianContext.Update(preparation); potigianContext.Add(PreparerProductivity.FromPreparation(preparation)); await potigianContext.SaveChangesAsync(); } } catch (Exception ex) { throw ex; } } return true; })); }
public async Task <ActionResult <Response <Preparer> > > GetPreparer(int id) { logger.LogInformation("GET preparadores/{id} invocado con id " + id); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var preparer = await potigianContext.Preparers.FirstOrDefaultAsync(p => p.Id == id); if (preparer == null) { preparer = new Preparer { Code = "-1" }; } return preparer; })); }
public async Task <ActionResult <Response <List <PurchaseOrderDetails> > > > GetOrderDetails(string prefixCode, string ocCode, string suffixCode) { logger.LogInformation("GET {prefijo}/{oc}/{sufijo} invocado con prefijo " + prefixCode + ", oc " + ocCode + " y sufijo " + suffixCode); return(await RequestsHandler.HandleAsyncRequest( logger, async() => await potigianContext.PurchaseOrderDetails .Where(od => od.PrefixOcCode.ToString() == prefixCode && od.OcCode.ToString() == ocCode && od.SuffixOcCode.ToString() == suffixCode) .Join( potigianContext.Articles, od => od.ArticleCode, article => article.Code, (od, article) => od.Append(article)) .Join( potigianContext.ProviderArticles, od => od.ArticleCode, providerArticle => providerArticle.ArticleCode, (od, providerArticle) => od.Append(providerArticle)) .ToListAsync())); }
public async Task <ActionResult <Response <User> > > LoginUser(string usr, string code) { logger.LogInformation($"GET de usuario invocado por " + usr); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var user = await(from u in securityContext.Users join s in securityContext.AccessSystems on u.AccessCode.Trim() equals s.AccessCode.Trim() where s.Name.Trim() == "Mercaderias" && u.Code.Trim() == usr && u.AccessCode.Trim() == code select u).FirstOrDefaultAsync(); if (user == null) { user = new User { Code = "-1" }; } return user; })); }
public async Task <ActionResult <Response <List <PurchaseOrderHeader> > > > GetOrdersByProviderAndSuffixCode(string providerCode, string suffixCode) { logger.LogInformation("GET {sufijo}/proveedor/{code} invocado con sufijo " + suffixCode + " y code " + providerCode); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var expr = default(Expression <Func <PurchaseOrderHeader, bool> >); if (providerCode == "none" && suffixCode == "none") { expr = o => o.Situation == 1; } else if (providerCode == "none") { expr = o => o.OrderSuffix.ToString().Contains(suffixCode) && o.Situation == 1; } else if (suffixCode == "none") { expr = o => o.ProviderCode.ToString().Contains(providerCode) && o.Situation == 1; } else { expr = o => o.OrderSuffix.ToString().Contains(suffixCode) && o.ProviderCode.ToString().Contains(providerCode) && o.Situation == 1; } var ocs = potigianContext.PurchaseOrdersHeaders.Where(expr); await ocs.ForEachAsync(async oc => { oc.Items = await potigianContext.PurchaseOrderDetails .Where(od => od.SuffixOcCode == oc.OrderSuffix && od.PrefixOcCode == oc.OrderPrefix && od.OcCode == oc.OrderCode) .CountAsync(); }); return await ocs.ToListAsync(); })); }
public async Task <ActionResult <Response <SynchronizeOrderResponse> > > SynchronizeOrder(string prefixCode, string ocCode, string suffixCode, [FromBody] SynchronizeOrderPayload payload) { logger.LogInformation("POST {prefijo}/{oc}/{sufijo} invocado con prefijo " + prefixCode + ", oc " + ocCode + " y sufijo " + suffixCode); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var orderHeader = await potigianContext.PurchaseOrdersHeaders .FirstAsync(h => h.OrderPrefix == decimal.Parse(prefixCode) && h.OrderSuffix == decimal.Parse(suffixCode) && h.OrderCode == decimal.Parse(ocCode)); var orderDetails = await potigianContext.PurchaseOrderDetails .Where(d => d.PrefixOcCode == decimal.Parse(prefixCode) && d.SuffixOcCode == decimal.Parse(suffixCode) && d.OcCode == decimal.Parse(ocCode)) .ToListAsync(); var articleCodes = orderDetails.Select(d => d.ArticleCode); var articles = await potigianContext.Articles.Where(a => articleCodes.Contains(a.Code)).ToListAsync(); var detailsPending = orderDetails.Where(d => d.RequestedPackages > payload.ArticleCount[d.ArticleCode]); await potigianContext.Database.BeginTransactionAsync(); var response = new SynchronizeOrderResponse(); try { // CABE Procedure { var ocParam = new SqlParameter("@C_OC", value: decimal.Parse(ocCode)); var prefixParam = new SqlParameter("@U_PREFIJO_OC", value: decimal.Parse(prefixCode)); var suffixParam = new SqlParameter("@U_SUFIJO_OC", value: decimal.Parse(suffixCode)); var situationParam = new SqlParameter("@C_SITUAC_OC", value: (decimal)(detailsPending.Any() ? 1 : 2)); // 1 pending - 2 ready var receivedGoodsDateParam = new SqlParameter("@f_comp_ing_merc", value: payload.OrderAdditionalInfo.Date); var receivedGoodsCodeParam = new SqlParameter("@C_COMP_ING_MERC", value: (decimal)payload.OrderAdditionalInfo.BillType); var purchasePrefixParam = new SqlParameter("@U_PREFIJO_COMP_ING_MERC", value: payload.OrderAdditionalInfo.PrefixOc); var purchaseSuffixParam = new SqlParameter("@U_SUFIJO_COMP_ING_MERC", value: payload.OrderAdditionalInfo.SuffixOc); var observationParam = new SqlParameter("@D_OBSERVACION_ING_MERC", value: payload.OrderAdditionalInfo.Observations); var userParam = new SqlParameter("@vchUsuario", value: payload.OrderAdditionalInfo.User); var terminalParam = new SqlParameter("@vchTerminal", value: payload.OrderAdditionalInfo.Terminal); var outputMessageParam = new SqlParameter { ParameterName = "@vchMensaje", Value = "", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.VarChar, Size = 255 }; var returnCode = new SqlParameter { ParameterName = "@returnCode", Value = -1, Direction = ParameterDirection.Output, }; await potigianContext.Database.ExecuteSqlCommandAsync("EXEC @returnCode = dbo.SD03_OC_ING_MERC_ACTU_CABE " + "@C_OC, @U_PREFIJO_OC, @U_SUFIJO_OC, @C_SITUAC_OC, @f_comp_ing_merc, @C_COMP_ING_MERC, " + "@U_PREFIJO_COMP_ING_MERC, @U_SUFIJO_COMP_ING_MERC, @D_OBSERVACION_ING_MERC, " + "@vchUsuario, @vchTerminal, @vchMensaje OUTPUT", returnCode, ocParam, prefixParam, suffixParam, situationParam, receivedGoodsDateParam, receivedGoodsCodeParam, purchasePrefixParam, purchaseSuffixParam, observationParam, userParam, terminalParam, outputMessageParam); response.HeaderMessage = (string)outputMessageParam.Value; response.HeaderReturnCode = (int)returnCode.Value; } // DETA PROCEDURE foreach (var orderDetail in orderDetails) { var providerParam = new SqlParameter("@C_PROVEEDOR", value: orderHeader.ProviderCode); var ocParam = new SqlParameter("@C_OC", value: decimal.Parse(ocCode)); var companyBranchParam = new SqlParameter("@C_SUCU_EMPR", value: payload.OrderAdditionalInfo.Branch); var destinationBranchParam = new SqlParameter("@C_SUCU_DESTINO_ALT", value: orderHeader.AlternativeDestinationBranch); var prefixOcParam = new SqlParameter("@U_PREFIJO_OC", value: decimal.Parse(prefixCode)); var suffixOcParam = new SqlParameter("@U_SUFIJO_OC", value: decimal.Parse(suffixCode)); var ocMotherParam = new SqlParameter("@M_OC_MADRE", value: orderHeader.MotherFlag); var situationCodeParam = new SqlParameter("@C_SITUAC_OC", value: (decimal)(detailsPending.Any(d => d.ArticleCode == orderDetail.ArticleCode) ? 1 : 2)); // 1 pending - 2 ready var articleCodeParam = new SqlParameter("@C_ARTICULO", value: orderDetail.ArticleCode); var saleByWeightParam = new SqlParameter("@M_VENDE_POR_PESO", value: articles.First(a => a.Code == orderDetail.ArticleCode).SellByWeight); var requestedUnitsParam = new SqlParameter("@Q_UNID_KGS_PED", value: orderDetail.RequestedPackages); var deliveredUnitsParam = new SqlParameter("@Q_UNID_KGS_CUMPL", value: payload.ArticleCount[orderDetail.ArticleCode]); var pendingUnitsParam = new SqlParameter("@Q_UNID_KGS_PEND", value: orderDetail.RequestedPackages - payload.ArticleCount[orderDetail.ArticleCode]); var receivedUnitsParam = new SqlParameter("@Q_UNID_KGS_ING", value: orderDetail.RequestedPackages); var receivedPacksParam = new SqlParameter("@Q_BULTOS_KGS_ING", value: orderDetail.RequestedBulks); var receivedPiecesFactorParam = new SqlParameter("@Q_FACTOR_PIEZAS_ING", value: orderDetail.RequestedFactor); var receivedGoodsBoughtParam = new SqlParameter("@C_COMP_ING_MERC", value: payload.OrderAdditionalInfo.BillType); var receivedGoodsPrefixParam = new SqlParameter("@U_PREFIJO_COMP_ING_MERC", value: payload.OrderAdditionalInfo.PrefixOc); var receivedGoodsSuffixParam = new SqlParameter("@U_SUFIJO_COMP_ING_MERC", value: payload.OrderAdditionalInfo.SuffixOc); var goodsDateParam = new SqlParameter("@F_COMP_ING_MERC", value: payload.OrderAdditionalInfo.Date); var programCodeParam = new SqlParameter("@C_PROGRAMA", value: Config.ProgramCode); var observationParam = new SqlParameter("@D_OBSERVACION", value: payload.OrderAdditionalInfo.Observations); var userParam = new SqlParameter("@vchUsuario", value: payload.OrderAdditionalInfo.User); var terminalParam = new SqlParameter("@vchTerminal", value: payload.OrderAdditionalInfo.Terminal); var outputMessageParam = new SqlParameter { ParameterName = "@vchMensaje", Value = "", Direction = ParameterDirection.Output, SqlDbType = SqlDbType.VarChar, Size = 255 }; var returnCode = new SqlParameter { ParameterName = "@returnCode", Value = -1, Direction = ParameterDirection.Output }; await potigianContext.Database.ExecuteSqlCommandAsync("EXEC @returnCode = dbo.SD03_OC_ING_MERC_ACTU_DETA " + "@C_PROVEEDOR, @C_OC, @C_SUCU_EMPR, @C_SUCU_DESTINO_ALT, @U_PREFIJO_OC, @U_SUFIJO_OC, @M_OC_MADRE, " + "@C_SITUAC_OC, @C_ARTICULO, @M_VENDE_POR_PESO, @Q_UNID_KGS_PED, @Q_UNID_KGS_CUMPL, @Q_UNID_KGS_PEND, " + "@Q_UNID_KGS_ING, @Q_BULTOS_KGS_ING, @Q_FACTOR_PIEZAS_ING, @C_COMP_ING_MERC, " + "@U_PREFIJO_COMP_ING_MERC, @U_SUFIJO_COMP_ING_MERC, @F_COMP_ING_MERC, @C_PROGRAMA, @D_OBSERVACION, " + "@vchUsuario, @vchTerminal, @vchMensaje OUTPUT", returnCode, providerParam, ocParam, companyBranchParam, destinationBranchParam, prefixOcParam, suffixOcParam, ocMotherParam, situationCodeParam, articleCodeParam, saleByWeightParam, requestedUnitsParam, deliveredUnitsParam, pendingUnitsParam, receivedUnitsParam, receivedPacksParam, receivedPiecesFactorParam, receivedGoodsBoughtParam, receivedGoodsPrefixParam, receivedGoodsSuffixParam, goodsDateParam, programCodeParam, observationParam, userParam, terminalParam, outputMessageParam); response.DetailInfo.Add(new SynchronizeOrderDetail { ArticleCode = orderDetail.ArticleCode, DetailMessage = (string)outputMessageParam.Value, DetailReturnCode = (int)returnCode.Value }); } potigianContext.Database.CommitTransaction(); return response; } catch (SqlException) { potigianContext.Database.RollbackTransaction(); throw; } })); }
public async Task <ActionResult <Response <bool> > > CloseRequestPreparation(int prefixDoc, int doc, int suffixDoc, [FromBody] CloseRequestPayload payload) { logger.LogInformation("POST preparaciones/{prefijo}/{doc}/{sufijo} invocado con prefijo " + prefixDoc + ", doc " + doc + " y sufijo " + suffixDoc); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { bool closedComplete = true; var requestDetails = await potigianContext.RequestDetails .Where(req => req.DocumentPrefix == prefixDoc && req.DocumentCode == doc && req.DocumentSuffix == suffixDoc) .ToListAsync(); var unfinishedRequestDetails = requestDetails .Where(req => req.PackagesGrams != payload.ArticleCount[GetDictionaryCountKey(req)]); var requestHeader = await potigianContext.RequestHeaders .FirstAsync(req => req.DocumentPrefix == prefixDoc && req.DocumentCode == doc && req.DocumentSuffix == suffixDoc); // Unfinished requests case if (unfinishedRequestDetails.Count() > 0) { var missingRequestDetails = unfinishedRequestDetails .Select(req => new RequestMissingDetails(req, payload.ArticleCount[GetDictionaryCountKey(req)])) .ToList(); foreach (var request in unfinishedRequestDetails) { int count = payload.ArticleCount[GetDictionaryCountKey(request)]; if (count != 0) { request.PackagesGrams = count; request.ArticleTotal = request.PackagesGrams *request.ArticleUnitaryPrice; potigianContext.RequestDetails.Update(request); } } potigianContext.RequestMissingDetails.AddRange(missingRequestDetails); closedComplete = false; } var preparation = await potigianContext.RequestPreparations.FirstAsync(p => p.DocumentSuffix == suffixDoc); preparation.EndDate = DateTime.Now; preparation.StatusCode = Config.Requests.StateClosed; preparation.MovementFlag = 'E'; var productivity = await potigianContext.PreparerProductivities.FirstAsync(p => p.DocumentSuffix == suffixDoc); productivity.EndDate = preparation.EndDate; productivity.StatusCode = preparation.StatusCode; productivity.MovementFlag = preparation.MovementFlag; var productivityDifferential = productivity.EndDate.Value.Subtract(productivity.StartDate.Value); productivity.Days = productivityDifferential.Days; productivity.Hours = productivityDifferential.Hours; productivity.Minutes = productivityDifferential.Minutes; productivity.Seconds = productivityDifferential.Seconds; requestHeader.SituationCode = Config.Requests.StateClosed; requestHeader.SituationDate = DateTime.Now; requestHeader.Printer = payload.Printer; requestHeader.TotalPackages = payload.Bags; potigianContext.RequestHeaders.Update(requestHeader); potigianContext.RequestPreparations.Update(preparation); potigianContext.PreparerProductivities.Update(productivity); await potigianContext.SaveChangesAsync(); return closedComplete; })); }
public async Task <ActionResult <Response <List <RequestHeaders> > > > AssignRequestsHeadersToPreparer( int preparer, [FromQuery(Name = "cigarrillos")] bool cigarettesOnly, [FromQuery(Name = "pedido")] int suffixNumber, [FromQuery(Name = "reparto")] int deliveryNumber) { logger.LogInformation("POST cabe/asignados/{preparador} invocado con preparador " + preparer); return(await RequestsHandler.HandleAsyncRequest( logger, async() => { var assignedRequests = await potigianContext.RequestHeaders .Where(req => (req.PreparerCode == preparer.ToString() || req.PreparerCode == $"CSPRP{preparer}") && req.SituationCode == Config.Requests.StateInPreparation) .ToListAsync(); // If there are any assigned requests, we won't assign new ones. if (assignedRequests.Count > 0) { return assignedRequests; } var newRequests = default(List <RequestHeaders>); if (suffixNumber != 0) { newRequests = await potigianContext.RequestHeaders .Where(req => req.DocumentSuffix == suffixNumber && req.SituationCode == Config.Requests.StateAvailableToPrepare) .ToListAsync(); } else if (deliveryNumber != 0) { newRequests = await potigianContext.RequestHeaders .Where(req => req.DistributionNumber == deliveryNumber && req.SituationCode == Config.Requests.StateAvailableToPrepare) .ToListAsync(); } if (newRequests == default(List <RequestHeaders>) || newRequests.Count == 0) { return new List <RequestHeaders>(); } var suffixes = newRequests.Select(req => req.DocumentSuffix).Distinct(); var prefixes = newRequests.Select(req => req.DocumentPrefix).Distinct(); var docs = newRequests.Select(req => req.DocumentCode).Distinct(); var requestsDetails = await potigianContext.RequestDetails .Where(req => suffixes.Contains(req.DocumentSuffix) && prefixes.Contains(req.DocumentPrefix) && docs.Contains(req.DocumentCode)) .ToListAsync(); var definedRequests = newRequests.Where(req => { var details = requestsDetails .Where(det => req.DocumentSuffix == det.DocumentSuffix && req.DocumentCode == det.DocumentCode && req.DocumentPrefix == det.DocumentPrefix); bool areOnlyCigarettes = details.All(det => new List <decimal?>() { 1, 2 }.Contains(det.FamilyCode)); return cigarettesOnly ? areOnlyCigarettes : !areOnlyCigarettes; }) .Take(config.GetValue <int>("RequestsPerPreparer")) .ToList(); definedRequests.ForEach(req => { req.SituationCode = Config.Requests.StateInPreparation; req.SituationDate = DateTime.Now; req.PreparerCode = preparer.ToString(); potigianContext.Update(req); }); await potigianContext.SaveChangesAsync(); return definedRequests; })); }