public void InsertPedidoItem(Orden orden)
        {
            using (var dbTransaction = _applicationDbContext.Database.BeginTransaction())
            {
                try
                {
                    //Lista de bienes patrimoniales
                    List <int> bienServList = orden.OrdenItem.Select(x => x.BienServicioId).ToList();

                    string      mes         = orden.FechaOrden.Month.ToString(new string(DigitosConstante.CERO[0], 2));
                    MesContable mesContable = _applicationDbContext
                                              .MesContable.Where(x => x.Codigo == mes).FirstOrDefault();


                    foreach (int item in bienServList)
                    {
                        OrdenSaldo ordenSaldo = _applicationDbContext
                                                .OrdenSaldo.Where(x => x.BienServicioId == item &&
                                                                  x.AlmacenId == orden.AlmacenId &&
                                                                  x.PeriodoEmpresaId == orden.PeriodoEmpresaId).FirstOrDefault();


                        foreach (var ordenItem in orden.OrdenItem)
                        {
                            if (ordenItem.BienServicioId.Equals(ordenSaldo.BienServicioId))
                            {
                                _applicationDbContext.OrdenSaldo.Where(x => x.BienServicioId == item && x.AlmacenId == orden.AlmacenId &&
                                                                       x.PeriodoEmpresaId == orden.PeriodoEmpresaId).ToList().ForEach(x =>
                                {
                                    x.CantidadSalida  += ordenItem.Cantidad;
                                    x.CantidadReserva -= ordenItem.Cantidad;
                                    x.ValorSalida     += ordenItem.Cantidad * ordenItem.ValorUnitario;
                                    x.MontoSaldo      -= x.ValorSalida;
                                });

                                _applicationDbContext.SaveChanges();
                                break;
                            }
                        }
                    }

                    _applicationDbContext.OrdenItem.AddRange(orden.OrdenItem);
                    orden.Cantidad      = orden.OrdenItem.Sum(x => x.Cantidad);
                    orden.SubTotal      = orden.OrdenItem.Sum(x => x.ValorUnitario) * orden.Cantidad;
                    orden.TotalPedido   = orden.SubTotal;
                    orden.MesContableId = mesContable.MesContableId;
                    orden.Impuesto      = 0;
                    _applicationDbContext.Orden.Add(orden);
                    _applicationDbContext.SaveChanges();

                    dbTransaction.Commit();
                }
                catch (DbEntityValidationException ex)
                {
                    dbTransaction.Rollback();
                    string entityValidationError = GetEntityValidationErrorMessage(ex);
                    throw new Exception(entityValidationError);
                }
            }
        }
예제 #2
0
 public void Update(MesContableDTO entity)
 {
     try
     {
         MesContable mesContable = Mapper.Map <MesContable>(entity);
         mesContableRepository.Update(mesContable);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #3
0
        protected override async Task OpenCreateModalAsync()
        {
            lastPeriodoContable = await AppService.GetLastAsync();

            MesContable inicio = new MesContable(DateTime.Now.Year, DateTime.Now.Month);

            if (lastPeriodoContable != null)
            {
                inicio         = lastPeriodoContable.Fin + 1;
                InicioDisabled = true;
            }

            await base.OpenCreateModalAsync();

            NewEntity.Inicio = ObjectMapper.Map <MesContable, MesContableEditDto>(inicio);
            NewEntity.Fin    = ObjectMapper.Map <MesContable, MesContableEditDto>(inicio + 11);
        }
예제 #4
0
        public async Task <PeriodoContable> CreateAsync(MesContable inicio, MesContable fin)
        {
            var last = await GetLastAsync();

            if (last != null)
            {
                if (!inicio.Equals(last.Fin + 1))
                {
                    throw new ArgumentException("El inicio debe ser un mes contiguo al último periodo");
                }
            }

            PeriodoContable periodo = new PeriodoContable(inicio, fin);

            await _periodosStore.InsertAsync(periodo, autoSave : true);

            return(periodo);
        }
예제 #5
0
        public void suma()
        {
            var mes = new MesContable(2010, 1);

            var uno = mes;

            uno++;

            var diez    = mes + 10;
            var once    = mes + 12;
            var dosaños = mes + 24;

            uno.Año.ShouldBe(2010);
            uno.Mes.ShouldBe(2);

            diez.Año.ShouldBe(2010);
            diez.Mes.ShouldBe(11);

            once.Año.ShouldBe(2011);
            once.Mes.ShouldBe(1);

            dosaños.Año.ShouldBe(2012);
            dosaños.Mes.ShouldBe(1);
        }
        public async Task InsertarCompra(Orden orden)
        {
            using (var dbTransaction = _applicationDbContext.Database.BeginTransaction())
            {
                try
                {
                    List <int>  bienServList = orden.OrdenItem.Select(x => x.BienServicioId).ToList();
                    string      mes          = orden.FechaOrden.Month.ToString(new string(DigitosConstante.CERO[0], 2));
                    MesContable mesContable  = await _applicationDbContext.MesContable.Where(x => x.Codigo == mes).FirstOrDefaultAsync();


                    foreach (int item in bienServList)
                    {
                        OrdenSaldo ordenSaldo = await _applicationDbContext.OrdenSaldo
                                                .Where(x => x.BienServicioId == item &&
                                                       x.AlmacenId == orden.AlmacenId &&
                                                       x.PeriodoEmpresaId == orden.PeriodoEmpresaId).FirstOrDefaultAsync();

                        if (ordenSaldo == null)
                        {
                            foreach (var ordenItem in orden.OrdenItem)
                            {
                                if (item.Equals(ordenItem.BienServicioId))
                                {
                                    var ordeSaldo = new OrdenSaldo
                                    {
                                        AlmacenId        = orden.AlmacenId,
                                        MesContableId    = mesContable.MesContableId,
                                        PeriodoEmpresaId = orden.PeriodoEmpresaId,
                                        BienServicioId   = ordenItem.BienServicioId
                                    };

                                    ordeSaldo.CantidadIngreso += ordenItem.Cantidad;
                                    ordeSaldo.ValorIngreso    += ordenItem.Cantidad * ordenItem.ValorUnitario;
                                    ordeSaldo.MontoSaldo      += ordenItem.Cantidad * ordenItem.ValorUnitario;
                                    ordeSaldo.CantidadReserva += ordenItem.Cantidad;

                                    _applicationDbContext.OrdenSaldo.Add(ordeSaldo);
                                    await _applicationDbContext.SaveChangesAsync();

                                    break;
                                }
                            }
                        }
                        else
                        {
                            foreach (var ordenItem in orden.OrdenItem)
                            {
                                if (ordenItem.BienServicioId.Equals(ordenSaldo.BienServicioId))
                                {
                                    _applicationDbContext.OrdenSaldo.Where(x => x.BienServicioId == item && x.AlmacenId == orden.AlmacenId &&
                                                                           x.PeriodoEmpresaId == orden.PeriodoEmpresaId).ToList().ForEach(x =>
                                    {
                                        x.CantidadIngreso += ordenItem.Cantidad;
                                        x.ValorIngreso     = ordenItem.Cantidad * ordenItem.ValorUnitario;
                                    });
                                    await _applicationDbContext.SaveChangesAsync();

                                    break;
                                }
                            }
                        }
                    }

                    _applicationDbContext.OrdenItem.AddRange(orden.OrdenItem);

                    decimal impuesto = ParametrosSistema.VALOR_IMPUESTO / 100;

                    orden.Cantidad      = orden.OrdenItem.Sum(x => x.Cantidad);
                    orden.SubTotal      = orden.OrdenItem.Sum(x => x.ValorUnitario) * orden.Cantidad;
                    orden.Impuesto      = orden.SubTotal * impuesto;
                    orden.TotalPedido   = orden.SubTotal + orden.Impuesto;
                    orden.MesContableId = mesContable.MesContableId;
                    _applicationDbContext.Orden.Add(orden);
                    await _applicationDbContext.SaveChangesAsync();

                    dbTransaction.Commit();
                }
                catch (DbEntityValidationException ex)
                {
                    dbTransaction.Rollback();
                    string entityValidationError = GetEntityValidationErrorMessage(ex);
                    throw new Exception(entityValidationError);
                }
            }
        }
예제 #7
0
 public PeriodoContable(MesContable inicio, MesContable fin)
 {
     Inicio = inicio;
     Fin    = fin;
 }