コード例 #1
0
        public ActionResult Grabar(EPRTA_MOVIMIENTO pmovimiento, bool pregistro_nuevo)
        {
            string  msgErr  = "";
            JObject retorno = new JObject();

            if (pregistro_nuevo)
            {
                try
                {
                    EPRTA_MOVIMIENTO movimiento = new EPRTA_MOVIMIENTO();
                    movimiento.OBSERVACION           = pmovimiento.OBSERVACION.ToUpper();
                    movimiento.USUARIO_SOLICITA      = Session["usuario"].ToString();
                    movimiento.FECHA_SOLICITUD       = DateTime.Now;
                    movimiento.ESTADO                = "S";
                    movimiento.ID_DIRECCION_SOLICITA = Convert.ToByte(Session["id_direccion"].ToString());
                    movimiento.ANIO = (short)DateTime.Now.Year;
                    movimiento.ID_TIPO_MOVIMIENTO = 12;
                    movimiento.ID_BODEGA          = 1;

                    msgErr = "[Intentando obtener secuencia] ";
                    EPRTA_SECUENCIA secuencia = unitOfWork.SecuenciaRepository.GetAll().Where(p => p.ID_TIPO_MOVIMIENTO == 12 && p.ANIO == movimiento.ANIO).FirstOrDefault();
                    movimiento.NUMERO_MOVIMIENTO = (int)secuencia.SECUENCIA;
                    msgErr = "";
                    foreach (EPRTA_MOVIMIENTO_DETALLE detalle in pmovimiento.EPRTA_MOVIMIENTO_DETALLE)
                    {
                        detalle.ESTADO = "A";
                        movimiento.EPRTA_MOVIMIENTO_DETALLE.Add(detalle);
                    }
                    secuencia.SECUENCIA++;
                    msgErr = "[Intentando grabar en Base de datos] ";
                    unitOfWork.MovimientoRepository.Insert(movimiento);
                    unitOfWork.SecuenciaRepository.Update(secuencia);
                    unitOfWork.Save();
                    retorno.Add("resultado", "success");
                    retorno.Add("data", null);
                }
                catch (Exception ex)
                {
                    retorno.Add("resultado", "error");
                    retorno.Add("data", null);
                    retorno.Add("msg", msgErr + ex.ToString());
                    logger.Error(ex, ex.Message);
                }
            }
            else //Registro a modificar
            {
                try
                {
                    EPRTA_MOVIMIENTO movimiento = unitOfWork.MovimientoRepository.GetById(pmovimiento.ID_MOVIMIENTO);
                    movimiento.OBSERVACION = pmovimiento.OBSERVACION;
                    if (pmovimiento.ESTADO == "A")
                    {
                        movimiento.ESTADO             = "A";
                        movimiento.USUARIO_AUTORIZA   = Session["usuario"].ToString();
                        movimiento.FECHA_AUTORIZACION = DateTime.Now;
                    }
                    else if (pmovimiento.ESTADO == "S")
                    {
                        movimiento.ESTADO             = "S";
                        movimiento.USUARIO_AUTORIZA   = null;
                        movimiento.FECHA_AUTORIZACION = null;
                    }


                    foreach (EPRTA_MOVIMIENTO_DETALLE detalle in pmovimiento.EPRTA_MOVIMIENTO_DETALLE)
                    {
                        if (detalle.ID_DETALLE == 0) //Si no tiene un id no existe en la base y se tiene que registrar
                        {
                            detalle.ID_MOVIMIENTO    = movimiento.ID_MOVIMIENTO;
                            detalle.EPRTA_MOVIMIENTO = movimiento;
                            detalle.ESTADO           = "A";
                            movimiento.EPRTA_MOVIMIENTO_DETALLE.Add(detalle);
                        }
                        else
                        {
                            if (detalle.ESTADO == "E" && detalle.ID_DETALLE > 0)  //Si tiene un id se busca en la base para eliminarlo
                            {
                                //EPRTA_MOVIMIENTO_DETALLE registro_eliminar = unitOfWork.MovimientoDetalleRepository.GetById(detalle.ID_DETALLE);
                                unitOfWork.MovimientoDetalleRepository.Delete(detalle.ID_DETALLE);
                            }
                            else
                            {
                                movimiento.EPRTA_MOVIMIENTO_DETALLE.Where(p => p.ID_DETALLE == detalle.ID_DETALLE).FirstOrDefault().CANTIDAD_MOVIMIENTO = detalle.CANTIDAD_MOVIMIENTO;
                            }
                        }
                    }
                    unitOfWork.MovimientoRepository.Update(movimiento);
                    unitOfWork.Save();
                    retorno.Add("resultado", "success");
                    retorno.Add("data", null);
                    retorno.Add("mensaje", "");
                }
                catch (Exception ex)
                {
                    retorno.Add("resultado", "error");
                    retorno.Add("data", null);
                    retorno.Add("mensaje", ex.ToString());
                    logger.Error(ex, ex.Message);
                }
            }
            return(Content(retorno.ToString(), "application/json"));
        }
コード例 #2
0
        public ActionResult Grabar(EPRTA_MOVIMIENTO pmovimiento)
        {
            string  msgErr  = "";
            JObject retorno = new JObject();

            try
            {
                //EPRTA_MOVIMIENTO movimiento = new EPRTA_MOVIMIENTO();
                pmovimiento.USUARIO_SOLICITA = Session["usuario"].ToString();
                pmovimiento.FECHA_SOLICITUD  = DateTime.Now;
                pmovimiento.USUARIO_APRUEBA  = Session["usuario"].ToString();
                pmovimiento.FECHA_APROBACION = DateTime.Now;
                pmovimiento.ESTADO           = "D";
                pmovimiento.ANIO             = (short)DateTime.Now.Year;
                pmovimiento.ID_BODEGA        = Byte.Parse(Session["bodega_id"].ToString());
                foreach (EPRTA_MOVIMIENTO_DETALLE detalle in pmovimiento.EPRTA_MOVIMIENTO_DETALLE)
                {
                    detalle.ESTADO = "A";
                    EPRTA_ARTICULO_BODEGA itemstock = unitOfWork.ArticuloBodegaRepository.GetAll().Where(p => p.ID_ITEM == detalle.ID_ITEM && p.ID_BODEGA == Byte.Parse(Session["bodega_id"].ToString())).FirstOrDefault();
                    if (pmovimiento.ID_TIPO_MOVIMIENTO == (int)EnumTipoMovimiento.REQUISICION_BODEGA || pmovimiento.ID_TIPO_MOVIMIENTO == (int)EnumTipoMovimiento.AJUSTE_DE_BODEGA_POR_EGRESO)
                    {
                        if (detalle.CANTIDAD_MOVIMIENTO > itemstock.CANTIDAD_ACTUAL)
                        {
                            throw new ArgumentException("El item " + itemstock.EPRTA_ITEM.DESCRIPCION + " no tiene stock suficiente, y no se puede rebajar");
                        }
                    }

                    detalle.COSTO_ACTUAL = itemstock == null ? 0 : itemstock.COSTO_PROMEDIO;
                    detalle.STOCK_ACTUAL = itemstock == null ? 0 : itemstock.CANTIDAD_ACTUAL;
                    if (pmovimiento.ID_TIPO_MOVIMIENTO != 4)
                    {
                        detalle.COSTO_MOVIMIENTO = itemstock.COSTO_PROMEDIO;
                    }
                }
                msgErr = "Intentado obtener secuencia";
                EPRTA_SECUENCIA secuencia = unitOfWork.SecuenciaRepository.GetAll().Where(p => p.ID_TIPO_MOVIMIENTO == pmovimiento.ID_TIPO_MOVIMIENTO && p.ANIO == pmovimiento.ANIO).FirstOrDefault();
                pmovimiento.NUMERO_MOVIMIENTO = (int)secuencia.SECUENCIA;
                secuencia.SECUENCIA++;
                msgErr = "Intentando grabar en base de datos";
                unitOfWork.MovimientoRepository.Insert(pmovimiento);
                unitOfWork.SecuenciaRepository.Update(secuencia);
                //EPRTA_MOVIMIENTO x = unitOfWork.MovimientoRepository.GetById(movimiento.ID_MOVIMIENTO);
                string ingreso_egreso = unitOfWork.TipoMovimientoRepository.GetById(pmovimiento.ID_TIPO_MOVIMIENTO).INGRESO_EGRESO;
                ActualizaStock(pmovimiento, ingreso_egreso);
                //Si es egreso se busca la solicitud de requisicion para actualizar el estado
                EPRTA_MOVIMIENTO movimiento_relacionado = null;
                if (pmovimiento.ID_MOVIMIENTO_RELACION != null)
                {
                    movimiento_relacionado                  = unitOfWork.MovimientoRepository.Where(x => x.ID_MOVIMIENTO == pmovimiento.ID_MOVIMIENTO_RELACION).FirstOrDefault();
                    movimiento_relacionado.ESTADO           = "D";
                    movimiento_relacionado.FECHA_APROBACION = DateTime.Now;
                    movimiento_relacionado.USUARIO_APRUEBA  = Session["usuario"].ToString();
                    unitOfWork.MovimientoRepository.Update(movimiento_relacionado);
                }
                unitOfWork.Save();
                pmovimiento = unitOfWork.MovimientoRepository.GetById(pmovimiento.ID_MOVIMIENTO);

                retorno.Add("resultado", "success");
                retorno.Add("data", pmovimiento.ID_MOVIMIENTO);
                retorno.Add("mensaje", "");
            }
            catch (Exception ex)
            {
                retorno.Add("resultado", "error");
                retorno.Add("data", null);
                retorno.Add("mensaje", "[" + msgErr + "] " + ex.ToString());
                logger.Error(ex, ex.Message);
            }
            return(Content(retorno.ToString(), "application/json"));
        }