Ejemplo n.º 1
0
        public dto.ComprobanteGuardarResponse GuardarComprobante(dto.ComprobanteGuardarRequest r)
        {
            dto.ComprobanteGuardarResponse response = new dto.ComprobanteGuardarResponse();
            try
            {
                byte tipodete = 2;
                var  cabecera = Mapper.Map <ent.Comprobante, dato.Comprobante>(r.ComprobanteCabecera);
                var  detalle  = Mapper.Map <IEnumerable <ent.Comprobantedetalle>, IEnumerable <dato.Comprobantedetalle> >(r.ComprobanteDetalle);
                if (cabecera.ComprobanteTipoId == 7)
                {
                    tipodete = 1;
                }
                if (cabecera.Id == 0)
                {
                    var serieServ = new dom.Serie().Buscar(c => c.EmpresaId == r.ComprobanteCabecera.EmpresaId && c.Serie1 == r.ComprobanteCabecera.Serie && c.ComprobanteTipoId == r.ComprobanteCabecera.ComprobanteTipoId && c.Proforma == false).FirstOrDefault();
                    cabecera.Correlativo = (serieServ.Correlativo + 1).ToString();
                    new dom.Comprobante().Adicionar(cabecera);
                    foreach (var item in detalle)
                    {
                        item.ComprobanteId = cabecera.Id;
                        new dom.ComprobanteDetalles().Adicionar(item);
                        var producto = new dom.Producto().BuscarPorId(item.ProductoId);
                        if (item.Tipo == 1)
                        {
                            if (cabecera.ComprobanteTipoId == 1 || cabecera.ComprobanteTipoId == 3 || cabecera.ComprobanteTipoId == 8)
                            {
                                if (producto.Stock - item.Cantidad > 0)
                                {
                                    producto.Stock = producto.Stock - item.Cantidad;
                                }
                                else
                                {
                                    producto.Stock = 0;
                                }
                            }
                            else
                            {
                                producto.Stock = producto.Stock + item.Cantidad;
                            }
                            new dom.Producto().Modificar(producto);
                            dato.Almacen objAlmacen = new dato.Almacen();
                            objAlmacen.Tipo           = tipodete;
                            objAlmacen.UsuarioId      = cabecera.UsuarioId;
                            objAlmacen.ProductoId     = item.ProductoId;
                            objAlmacen.ProductoNombre = item.ProductoNombre;
                            objAlmacen.UnidadMedidaId = item.UnidadMedidaId;
                            objAlmacen.Cantidad       = (decimal)item.Cantidad;
                            objAlmacen.Fecha          = DateTime.Now;
                            objAlmacen.EmpresaId      = cabecera.EmpresaId;
                            objAlmacen.ComprobanteId  = cabecera.Id;
                            objAlmacen.Precio         = item.PrecioTotal;
                            new dom.Almacen().Adicionar(objAlmacen);
                        }
                    }

                    var serie = new dom.Serie().BuscarPrimero(c => c.EmpresaId == cabecera.EmpresaId && c.Serie1 == cabecera.Serie && c.ComprobanteTipoId == cabecera.ComprobanteTipoId);
                    serie.Correlativo = Convert.ToInt64(cabecera.Correlativo);
                    new dom.Serie().Modificar(serie);


                    response.IdComprobante = cabecera.Id;
                }
                else
                {
                    new dom.Comprobante().Modificar(cabecera);
                    var comprobanteDetalles = new dom.ComprobanteDetalles();
                    var detalleEdicion      = comprobanteDetalles.Buscar(c => c.ComprobanteId == cabecera.Id).ToList();
                    foreach (var item in detalleEdicion)
                    {
                        var productoEdicion = new dom.Producto().BuscarPorId(item.ProductoId);
                        if (item.Tipo == 1)
                        {
                            if (cabecera.ComprobanteTipoId == 1 || cabecera.ComprobanteTipoId == 3 || cabecera.ComprobanteTipoId == 8)
                            {
                                //devolucion
                                productoEdicion.Stock = productoEdicion.Stock + item.Cantidad;
                            }
                            else
                            {
                                productoEdicion.Stock = productoEdicion.Stock - item.Cantidad;
                            }
                            new dom.Producto().Modificar(productoEdicion);

                            dato.Almacen objAlmacen = new dato.Almacen();
                            objAlmacen.Tipo           = 3;
                            objAlmacen.UsuarioId      = cabecera.UsuarioId;
                            objAlmacen.ProductoId     = item.ProductoId;
                            objAlmacen.ProductoNombre = item.ProductoNombre;
                            objAlmacen.UnidadMedidaId = item.UnidadMedidaId;
                            objAlmacen.Cantidad       = (decimal)item.Cantidad;
                            objAlmacen.Fecha          = DateTime.Now;
                            objAlmacen.EmpresaId      = cabecera.EmpresaId;
                            objAlmacen.ComprobanteId  = cabecera.Id;
                            objAlmacen.Precio         = item.PrecioTotal;
                            new dom.Almacen().Adicionar(objAlmacen);
                        }
                        comprobanteDetalles.Eliminar(item);
                    }

                    foreach (var item in detalle)
                    {
                        item.ComprobanteId = cabecera.Id;
                        new dom.ComprobanteDetalles().Adicionar(item);
                        var producto = new dom.Producto().BuscarPorId(item.ProductoId);
                        if (item.Tipo == 1)
                        {
                            if (cabecera.ComprobanteTipoId == 1 || cabecera.ComprobanteTipoId == 3 || cabecera.ComprobanteTipoId == 8)
                            {
                                if (producto.Stock - item.Cantidad > 0)
                                {
                                    producto.Stock = producto.Stock - item.Cantidad;
                                }
                                else
                                {
                                    producto.Stock = 0;
                                }
                            }
                            else
                            {
                                producto.Stock = producto.Stock + item.Cantidad;
                            }
                            new dom.Producto().Modificar(producto);

                            dato.Almacen objAlmacen = new dato.Almacen();
                            objAlmacen.Tipo           = tipodete;
                            objAlmacen.UsuarioId      = cabecera.UsuarioId;
                            objAlmacen.ProductoId     = item.ProductoId;
                            objAlmacen.ProductoNombre = item.ProductoNombre;
                            objAlmacen.UnidadMedidaId = item.UnidadMedidaId;
                            objAlmacen.Cantidad       = (decimal)item.Cantidad;
                            objAlmacen.Fecha          = DateTime.Now;
                            objAlmacen.EmpresaId      = cabecera.EmpresaId;
                            objAlmacen.ComprobanteId  = cabecera.Id;
                            objAlmacen.Precio         = item.PrecioTotal;
                            new dom.Almacen().Adicionar(objAlmacen);
                        }
                    }
                    response.IdComprobante = cabecera.Id;
                }
            }
            catch (Exception Ex)
            {
                response.IdComprobante = 0;
            }
            return(response);
        }
Ejemplo n.º 2
0
 public dto.ComprobanteGuardarResponse GuardarComprobante(dto.ComprobanteGuardarRequest r)
 {
     return(new app.Comprobante().GuardarComprobante(r));
 }