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")); }
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")); }