Exemplo n.º 1
0
        public async Task <long> GenerarPreliquidacion(PreliquidacionForRegister command)
        {
            IEnumerable <GetPendientesLiquidacion> result;
            Decimal SubTo = 0;

            var parametros = new DynamicParameters();

            parametros.Add("ClienteId", dbType: DbType.Int32, direction: ParameterDirection.Input, value: command.ClienteId);

            using (IDbConnection conn = Connection)
            {
                string sQuery = "[Facturacion].[pa_listarpendientespreliquidacion]";
                //conn.Open();
                result = await conn.QueryAsync <GetPendientesLiquidacion>(sQuery,
                                                                          parametros
                                                                          , commandType : CommandType.StoredProcedure
                                                                          );
            }
            foreach (var item in result)
            {
                SubTo = SubTo + item.Total;
            }

            using (var transaction = _context.Database.BeginTransaction())
            {
                var preliquidacion = new  Preliquidacion();
                try
                {
                    preliquidacion.AlmacenId        = 1;
                    preliquidacion.ClienteId        = command.ClienteId;
                    preliquidacion.FechaLiquidacion = DateTime.Now;
                    preliquidacion.SubTotal         = SubTo;
                    preliquidacion.Igv      = Convert.ToDecimal(Convert.ToDouble(SubTo) * 0.18);
                    preliquidacion.Total    = preliquidacion.SubTotal + preliquidacion.Igv;
                    preliquidacion.EstadoId = (int)Constantes.EstadoPreliquidacion.Pendiente;

                    await _context.AddAsync <Preliquidacion>(preliquidacion);

                    await _context.SaveChangesAsync();

                    PreliquidacionDetalle detalle;
                    foreach (var item in result)
                    {
                        detalle = new PreliquidacionDetalle();
                        detalle.FechaIngreso     = Convert.ToDateTime(item.FechaIngreso);
                        detalle.Ingreso          = item.Ingreso;
                        detalle.Montacarga       = item.MontaCarga;
                        detalle.Movilidad        = item.Movilidad;
                        detalle.Pos              = item.Posdia;
                        detalle.PreliquidacionId = preliquidacion.Id;
                        detalle.ProductoId       = item.ProductoId;
                        detalle.Salida           = item.Salida;
                        detalle.Seguro           = item.Seguro;
                        await _context.AddAsync <PreliquidacionDetalle>(detalle);
                    }
                    await _context.SaveChangesAsync();


                    preliquidacion.NumLiquidacion = "030-" + preliquidacion.Id.ToString().PadLeft(6, '0');
                    await _context.SaveChangesAsync();

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
                return(1);
            }
        }
        public CommandContracts.Common.CommandResult Handle(InsertarActualizarPreliquidacionCommand command)
        {
            if (command == null)
            {
                throw new ArgumentException("Tiene que ingresar una cliente");
            }

            Preliquidacion dominio     = null;
            Comprobante    dominio_com = null;

            if (command.idpreliquidacion.HasValue)
            {
                dominio = _PreliquidacionRepository.Get(x => x.idpreliquidacion == command.idpreliquidacion).LastOrDefault();
            }
            else
            {
                dominio = new Preliquidacion();
            }


            if (command._tipoop == 1)
            {
                dominio.fecharegistro     = command.fecharegistro;
                dominio.idcliente         = command.idcliente;
                dominio.idcomprobantepago = command.idcomprobantepago;
                dominio.idusuarioregistro = command.idusuarioregistro;
                dominio.igv = command.igv;
                dominio.numeropreliquidacion = command.numeropreliquidacion;
                dominio.recargo      = command.recargo;
                dominio.subtotal     = command.subtotal;
                dominio.total        = command.total;
                dominio.totalbulto   = command.totalbulto;
                dominio.totalpeso    = command.totalpeso;
                dominio.totalvolumen = command.totalvolumen;
                dominio.idestado     = command.idestado;
            }
            else if (command._tipoop == 2) // desvincular comprobante
            {
                dominio_com = _ComprobanteRepository.Get(x => x.idpreliquidacion == command.idpreliquidacion).LastOrDefault();
                dominio_com.idpreliquidacion = null;

                _ComprobanteRepository.SaveChanges();


                dominio.idestado          = command.idestado;
                dominio.idcomprobantepago = null;
            }
            else if (command._tipoop == 3)// Generar comprobante
            {
                dominio.idestado          = command.idestado;
                dominio.idcomprobantepago = command.idcomprobantepago;
            }
            else if (command._tipoop == 4) //eliminar preliquidacion
            {
                //_PreliquidacionRepository.Delete(dominio);
                //_PreliquidacionRepository.Commit();
                dominio.idestado = command.idestado;
            }


            try
            {
                if (!command.idpreliquidacion.HasValue)
                {
                    _PreliquidacionRepository.Add(dominio);
                }
                _PreliquidacionRepository.SaveChanges();


                return(new InsertarActualizarPreliquidacionOutput()
                {
                    idpreliquidacion = dominio.idpreliquidacion
                });
            }
            catch (Exception ex)
            {
                //  _ValortablaRepository.Delete(dominio);
                //_ValortablaRepository.Commit();
                throw;
            }
        }