Beispiel #1
0
        /// <summary>
        /// Guarda los datos del reporte de Eficiecias semanales
        /// </summary>
        /// <param name="list">Listado con las eficiencias de una semana</param>
        /// <param name="salesRoom">Sala de ventas</param>
        /// <param name="dtStart">Fecha inicial</param>
        /// <param name="dtEnd">Fecha Fin</param>
        /// <history>
        /// [ecanul] 18/08/2016 Created
        /// </history>
        /// <returns></returns>
        public async static Task <int> SaveEfficiencies(List <RptEfficiencyWeekly> list, string salesRoom, DateTime dtStart, DateTime dtEnd)
        {
            return(await Task.Run(async() =>
            {
                using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString()))
                {
                    using (var transact = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                    {
                        try
                        {
                            //Lista para agregar las eficiencias nuevas
                            var lstEffAdd = new List <Efficiency>();

                            //Obtener las eficiencias existentes dentro del rango de fechas, sala de ventas y periodo seleccionado
                            var lstEfficiency = dbContext.Efficiencies.Include(Ey => Ey.Personnels).Where(e => e.efsr == salesRoom && e.efDateFrom == dtStart && e.efDateTo == dtEnd && e.efpd == "W").ToList();
                            //Obtiene todos los tipos de eficiencias
                            var lstEfftypes = await BREfficiencyTypes.GetEfficiencyTypes();
                            //Eficiencia vacia
                            Efficiency eff = null;
                            //por cada tipo de Eficiencia
                            lstEfftypes.ForEach(eft =>
                            {
                                //Se busca en el listado todas las eficiencias que concuerden con el tipo de ficicicias actual
                                eff = lstEfficiency.Where(ef => ef.efet == eft.etID).FirstOrDefault();
                                //Si no se encontro la eficiencia se crea una nueva
                                if (eff == null)
                                {
                                    eff = new Efficiency
                                    {
                                        efsr = salesRoom,
                                        efDateFrom = dtStart,
                                        efDateTo = dtEnd,
                                        efet = eft.etID,
                                        efpd = "W"
                                    };
                                    dbContext.Entry(eff).State = EntityState.Added;
                                    var respuesta = dbContext.SaveChanges();
                                }
                                //Se guardan los vendedores del tipo de eficiencia
                                //Se eliminan los vendedores que tengan la eficiencia actual
                                //SP DE ELIMINAR USP_IM_DeleteEfficiencySalesmen
                                dbContext.USP_IM_DeleteEfficiencySalesmen(Convert.ToInt32(eff.efID));
                                //por cada elemento de la lista del reporte y que tengan un id
                                list.Where(add => add.EfficiencyType == eft.etN).ToList().ForEach(a =>
                                {
                                    if (!string.IsNullOrEmpty(a.SalemanID))
                                    {
                                        //Salvar EfficiencySalesman USP_IM_ADDEfficiencySalesmen
                                        dbContext.USP_IM_ADDEfficiencySalesmen((int)eff.efID, a.SalemanID);
                                        //dbContext.Database.ExecuteSqlCommand($"Insert into efficiencysalesman vaues({eff.efID}, {a.SalemanID})");
                                    }
                                });
                            });
                            transact.Commit();
                            return 1;
                        }
                        catch
                        {
                            transact.Rollback();
                            throw;
                        }
                    }
                }
            }));
        }