public ActionResult Solicitud(int id) { //JArray jArray = new JArray(); //JObject enviar = new JObject(); EPRTA_MOVIMIENTO movimiento = null; try { if (id > 0) { var empleados = (from e in unitOfWork.EmpleadoRepository.GetAll() select e); movimiento = unitOfWork.MovimientoRepository.GetById(id); ViewBag.usuario_solicita = (string)(from p in empleados where p.USUARIO == movimiento.USUARIO_SOLICITA select p.EMPLEADO).FirstOrDefault(); ViewBag.usuario_aprueba = movimiento.USUARIO_APRUEBA != null ? (from p in empleados where p.USUARIO == movimiento.USUARIO_APRUEBA select p.EMPLEADO).FirstOrDefault() : null; ViewBag.usuario_autoriza = movimiento.USUARIO_AUTORIZA != null ? (from p in empleados where p.USUARIO == movimiento.USUARIO_AUTORIZA select p.EMPLEADO).FirstOrDefault() : null; ViewBag.direccion_solicitud = unitOfWork.DireccionRepository.GetById(movimiento.ID_DIRECCION_SOLICITA).DESCRIPCION; } else { movimiento = new EPRTA_MOVIMIENTO(); movimiento.ESTADO = "S"; movimiento.ID_DIRECCION_SOLICITA = Convert.ToByte(Session["id_direccion"]); ViewBag.direccion_solicitud = Session["direccion"]; } } catch (Exception ex) { logger.Error(ex, ex.Message); //enviar.Add("resultado", "error"); //enviar.Add("msg", ex.Message); } return(View(movimiento)); }
public ActionResult GetDetalleSolicitudAutorizada(int pid_movimiento) { JArray jArray = new JArray(); JObject enviar = new JObject(); try { EPRTA_MOVIMIENTO movimiento = unitOfWork.MovimientoRepository.GetById(pid_movimiento); var stock = unitOfWork.ArticuloBodegaRepository.GetAll(); var tmp = (from p in movimiento.EPRTA_MOVIMIENTO_DETALLE //join st in stock on p.ID_ITEM equals st.ID_ITEM into pst from st in pst.DefaultIfEmpty() join st in stock on new { id_bodega = movimiento.ID_BODEGA, id_item = p.ID_ITEM } equals new { id_bodega = st.ID_BODEGA, id_item = st.ID_ITEM } into pst from st in pst.DefaultIfEmpty() select new { CODIGO = p.EPRTA_ITEM.CODIGO, ITEM = p.EPRTA_ITEM.DESCRIPCION, CANTIDAD = p.CANTIDAD_MOVIMIENTO, MEDIDA = p.EPRTA_ITEM.EPRTA_MEDIDA.NOMBRE, STOCK_ACTUAL = st.CANTIDAD_ACTUAL, COSTO_ACTUAL = st.COSTO_PROMEDIO, ID_ITEM = p.ID_ITEM }).ToList(); enviar.Add("resultado", "success"); enviar.Add("data", JArray.FromObject(tmp)); } catch (Exception ex) { logger.Error(ex, ex.Message); enviar.Add("resultado", "error"); enviar.Add("msg", ex.Message); } return(Content(enviar.ToString(), "application/json")); }
public FileResult ViewPDF(int?id) { Stream stream = null; var nombreArchivo = ""; ReportDocument reportDocument = new ReportDocument(); byte[] pdfByte = null; try { EPRTA_MOVIMIENTO solicitud = unitOfWork.MovimientoRepository.GetById(id); EntitiesProveduria db = new EntitiesProveduria(); SqlConnectionStringBuilder builderVenta = new SqlConnectionStringBuilder(db.Database.Connection.ConnectionString); SP_REQUISICION_BODEGATableAdapter tableAdapter = new SP_REQUISICION_BODEGATableAdapter(); object objetos = new object(); DataTable dataTable = tableAdapter.GetData(id, out objetos); String pathReport = Path.Combine(HttpRuntime.AppDomainAppPath, "Reports\\Cr_Requisicion_Bodega.rpt"); reportDocument.Load(pathReport); reportDocument.SetDataSource(dataTable); reportDocument.SetDatabaseLogon(builderVenta.UserID, builderVenta.Password); stream = reportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); pdfByte = ReadFully(stream); nombreArchivo = "REQUISICION DE BODEGA "; Response.AddHeader("content-disposition", "inline; title='';" + "filename=" + nombreArchivo + ".pdf"); } catch (Exception ex) { logger.Error(ex, ex.Message); } finally { if (reportDocument != null) { if (reportDocument.IsLoaded) { reportDocument.Close(); reportDocument.Dispose(); } } } return(File(pdfByte, MediaTypeNames.Application.Pdf)); }
public ActionResult Movimiento(int id) { //JArray jArray = new JArray(); //JObject enviar = new JObject(); EPRTA_MOVIMIENTO movimiento = null; string[] arrTiposOperacion = new string[] { "I", "E" }; List <EPRTA_TIPO_MOVIMIENTO> ltipo_movimiento = unitOfWork.TipoMovimientoRepository.GetAll().Where(p => arrTiposOperacion.Contains(p.INGRESO_EGRESO) && p.ESTADO == "A").ToList(); ViewBag.ltipo_movimiento = ltipo_movimiento; try { if (id > 0) { var empleados = (from e in unitOfWork.EmpleadoRepository.GetAll() select e); movimiento = unitOfWork.MovimientoRepository.GetById(id); ViewBag.usuario_solicita = (string)(from p in empleados where p.USUARIO == movimiento.USUARIO_SOLICITA select p.EMPLEADO).FirstOrDefault(); ViewBag.usuario_aprueba = movimiento.USUARIO_APRUEBA != null ? (from p in empleados where p.USUARIO == movimiento.USUARIO_APRUEBA select p.EMPLEADO).FirstOrDefault() : null; ViewBag.usuario_autoriza = movimiento.USUARIO_AUTORIZA != null ? (from p in empleados where p.USUARIO == movimiento.USUARIO_AUTORIZA select p.EMPLEADO).FirstOrDefault() : null; //ViewBag.departamento_solicitud = unitOfWork.DepartamentoRepository.GetById(movimiento.ID_DEPARTAMENTO_SOLICITA).DESCRIPCION; ViewBag.direccion_solicitud = unitOfWork.DireccionRepository.GetById(movimiento.ID_DIRECCION_SOLICITA).DESCRIPCION; } else { movimiento = new EPRTA_MOVIMIENTO(); movimiento.ESTADO = "S"; movimiento.ID_DIRECCION_SOLICITA = Convert.ToByte(Session["id_direccion"]); ViewBag.direccion_solicitud = Session["direccion"]; } } catch (Exception ex) { logger.Error(ex, ex.Message); } return(View(movimiento)); }
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")); }
private void ActualizaStock(EPRTA_MOVIMIENTO pmovimiento, string pingreso_egreso) { try { foreach (EPRTA_MOVIMIENTO_DETALLE detalle in pmovimiento.EPRTA_MOVIMIENTO_DETALLE) { //Obtengo el registro del item EPRTA_ITEM item = unitOfWork.ItemRepository.GetById(detalle.ID_ITEM); //Obtengo el registro del stock del item EPRTA_ARTICULO_BODEGA itemStock = unitOfWork.ArticuloBodegaRepository.GetAll().Where(p => p.ID_BODEGA == pmovimiento.ID_BODEGA && p.ID_ITEM == detalle.ID_ITEM).FirstOrDefault(); if (pingreso_egreso == "E") { //Actualizo el stock y el costo unitario itemStock.CANTIDAD_ACTUAL -= detalle.CANTIDAD_MOVIMIENTO; unitOfWork.ArticuloBodegaRepository.Update(itemStock); //Actualizo la fecha del ultimo egreso item.FECHA_ULTIMO_EGRESO = DateTime.Now; unitOfWork.ItemRepository.Update(item); } else if (pingreso_egreso == "I") { //Calcular nuevo costo promedio decimal nuevo_costo_promedio = 0; decimal nuevo_cantidad_stock = 0; if (itemStock == null) { nuevo_costo_promedio = Convert.ToDecimal(detalle.COSTO_MOVIMIENTO); } else { decimal costo_total_actual = Convert.ToDecimal(itemStock.CANTIDAD_ACTUAL) * Convert.ToDecimal(itemStock.COSTO_PROMEDIO); decimal costo_total_movimiento = Convert.ToDecimal(detalle.COSTO_MOVIMIENTO) * Convert.ToDecimal(detalle.CANTIDAD_MOVIMIENTO); nuevo_cantidad_stock = Convert.ToDecimal(itemStock.CANTIDAD_ACTUAL) + Convert.ToDecimal(detalle.CANTIDAD_MOVIMIENTO); nuevo_costo_promedio = Math.Round((costo_total_actual + costo_total_movimiento) / nuevo_cantidad_stock, 3); } //Si no tiene registro de stock if (itemStock == null) { itemStock = new EPRTA_ARTICULO_BODEGA(); itemStock.ID_ITEM = detalle.ID_ITEM; itemStock.ID_BODEGA = pmovimiento.ID_BODEGA; itemStock.CANTIDAD_MAXIMA = 0; itemStock.CANTIDAD_ACTUAL = detalle.CANTIDAD_MOVIMIENTO; itemStock.CANTIDAD_INICIO = detalle.CANTIDAD_MOVIMIENTO; itemStock.CANTIDAD_CRITICA = 0; itemStock.CANTIDAD_MINIMA = 0; itemStock.CANTIDAD_BAJA = 0; itemStock.COSTO_PROMEDIO = nuevo_costo_promedio; unitOfWork.ArticuloBodegaRepository.Insert(itemStock); } else //Si ya tiene registro de stock, se procede a acutalizar valores { itemStock.COSTO_PROMEDIO = nuevo_costo_promedio; itemStock.CANTIDAD_ACTUAL = nuevo_cantidad_stock; //Actualizo la cantidad maxima if (itemStock.CANTIDAD_MAXIMA < itemStock.CANTIDAD_ACTUAL) { itemStock.CANTIDAD_MAXIMA = itemStock.CANTIDAD_ACTUAL; } unitOfWork.ArticuloBodegaRepository.Update(itemStock); } //Actualizo la fecha del ultimo ingreso y el historial del costo item.FECHA_ULTIMO_INGRESO = DateTime.Now; item.COSTO_ANTERIOR = item.COSTO_ACTUAL; item.COSTO_ACTUAL = nuevo_costo_promedio; unitOfWork.ItemRepository.Update(item); } } } catch (Exception ex) { throw ex; } }
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")); }