public bool Aprobar(int IdEmpresa, List <tbl_movimientos_det_Info> Lista, string IdUsuario) { Entities_mobileSCI db_mobile = new Entities_mobileSCI(); EntitiesInventario db_inv = new EntitiesInventario(); try { var Entity_p = db_inv.in_parametro.Where(q => q.IdEmpresa == IdEmpresa).FirstOrDefault(); if (Entity_p == null || Entity_p.IdMovi_inven_tipo_mobile_ing == null || Entity_p.IdMovi_inven_tipo_mobile_egr == null) { return(false); } var Entity_motivo_ing = db_inv.in_Motivo_Inven.Where(q => q.IdEmpresa == IdEmpresa && q.Tipo_Ing_Egr == "ING" && q.Genera_Movi_Inven == "S").FirstOrDefault(); if (Entity_motivo_ing == null) { return(false); } var Entity_motivo_egr = db_inv.in_Motivo_Inven.Where(q => q.IdEmpresa == IdEmpresa && q.Tipo_Ing_Egr == "EGR" && q.Genera_Movi_Inven == "S" && q.es_Inven_o_Consumo == "TIC_CONSU").FirstOrDefault(); if (Entity_motivo_egr == null) { return(false); } #region Ingresos var lst_mov_agrupada = (from q in Lista where q.cantidad > 0 group new { q.IdEmpresa, q.IdSucursal, q.IdBodega, q.Fecha, q.IdSucursal_oc, q.IdOrdenCompra } by new { q.IdEmpresa, q.IdSucursal, q.IdBodega, q.Fecha, q.IdSucursal_oc, q.IdOrdenCompra } into g select new tbl_movimientos_det_Info { IdEmpresa = g.Key.IdEmpresa, IdSucursal = g.Key.IdSucursal, IdBodega = g.Key.IdBodega, Fecha = g.Key.Fecha, IdSucursal_oc = g.Key.IdSucursal_oc, IdOrdenCompra = g.Key.IdOrdenCompra, }).ToList(); foreach (var item in lst_mov_agrupada) { #region Cabecera in_Ing_Egr_Inven Entity_cab = new in_Ing_Egr_Inven { IdEmpresa = item.IdEmpresa, IdSucursal = item.IdSucursal, IdMovi_inven_tipo = Convert.ToInt32(Entity_p.IdMovi_inven_tipo_mobile_ing), IdNumMovi = get_id(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(Entity_p.IdMovi_inven_tipo_mobile_ing)), IdBodega = item.IdBodega, signo = "+", CodMoviInven = "MOBILE", cm_observacion = "Aprobación móvil " + DateTime.Now.ToString("dd/MM/yyyy"), cm_fecha = item.Fecha, Estado = "A", IdMotivo_Inv = Entity_motivo_ing.IdMotivo_Inv, IdUsuario = IdUsuario, Fecha_Transac = DateTime.Now }; db_inv.in_Ing_Egr_Inven.Add(Entity_cab); #endregion #region Detalle int sec = 1; foreach (var mov in Lista.Where(q => q.IdEmpresa == item.IdEmpresa && q.IdSucursal == item.IdSucursal && q.IdBodega == item.IdBodega && q.Fecha == item.Fecha && q.IdSucursal_oc == item.IdSucursal_oc && q.IdOrdenCompra == item.IdOrdenCompra && q.cantidad > 0).ToList()) { in_Ing_Egr_Inven_det Entity_det = new in_Ing_Egr_Inven_det { IdEmpresa = Entity_cab.IdEmpresa, IdSucursal = Entity_cab.IdSucursal, IdMovi_inven_tipo = Entity_cab.IdMovi_inven_tipo, IdNumMovi = Entity_cab.IdNumMovi, Secuencia = sec++, IdBodega = mov.IdBodega, IdProducto = mov.IdProducto, dm_cantidad = mov.cantidad, dm_stock_actu = 0, dm_stock_ante = 0, dm_observacion = "", dm_precio = 0, mv_costo = mov.do_precioFinal, dm_peso = 0, IdCentroCosto = null, IdCentroCosto_sub_centro_costo = null, IdEstadoAproba = "PEND", IdUnidadMedida = mov.IdUnidadMedida, IdEmpresa_oc = mov.IdEmpresa_oc, IdSucursal_oc = mov.IdSucursal_oc, IdOrdenCompra = mov.IdOrdenCompra, Secuencia_oc = mov.secuencia_oc, Motivo_Aprobacion = "Aprobación movil", dm_cantidad_sinConversion = mov.cantidad, IdUnidadMedida_sinConversion = mov.IdUnidadMedida, mv_costo_sinConversion = mov.do_precioFinal, IdMotivo_Inv = null }; db_inv.in_Ing_Egr_Inven_det.Add(Entity_det); tbl_movimientos_det_apro Entity_apro = new tbl_movimientos_det_apro { IdSincronizacion = mov.IdSincronizacion, IdSecuencia = mov.IdSecuencia, IdEmpresa = mov.IdEmpresa, IdSucursal = mov.IdSucursal, IdMovi_inven_tipo = Entity_cab.IdMovi_inven_tipo, IdNumMovi = Entity_cab.IdNumMovi, Secuencia = Entity_det.Secuencia }; db_mobile.tbl_movimientos_det_apro.Add(Entity_apro); var Entity_sinc = db_mobile.tbl_movimientos_det.Where(q => q.IdSincronizacion == mov.IdSincronizacion && q.IdSecuencia == mov.IdSecuencia).FirstOrDefault().Aprobado = true; } #endregion db_inv.SaveChanges(); db_mobile.SaveChanges(); db_inv.spINV_aprobacion_movimiento(Entity_cab.IdEmpresa, Entity_cab.IdSucursal, Entity_cab.IdMovi_inven_tipo, Entity_cab.IdBodega, Entity_cab.IdNumMovi); } #endregion #region Egresos lst_mov_agrupada = (from q in Lista where q.cantidad < 0 group new { q.IdEmpresa, q.IdSucursal, q.IdBodega, q.Fecha } by new { q.IdEmpresa, q.IdSucursal, q.IdBodega, q.Fecha } into g select new tbl_movimientos_det_Info { IdEmpresa = g.Key.IdEmpresa, IdSucursal = g.Key.IdSucursal, IdBodega = g.Key.IdBodega, Fecha = g.Key.Fecha }).ToList(); foreach (var item in lst_mov_agrupada) { #region Cabecera in_Ing_Egr_Inven Entity_cab = new in_Ing_Egr_Inven { IdEmpresa = item.IdEmpresa, IdSucursal = item.IdSucursal, IdMovi_inven_tipo = Convert.ToInt32(Entity_p.IdMovi_inven_tipo_mobile_egr), IdNumMovi = get_id(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(Entity_p.IdMovi_inven_tipo_mobile_egr)), IdBodega = item.IdBodega, signo = "-", CodMoviInven = "MOBILE", cm_observacion = "Aprobación móvil " + DateTime.Now.ToString("dd/MM/yyyy"), cm_fecha = item.Fecha, Estado = "A", IdMotivo_Inv = Entity_motivo_egr.IdMotivo_Inv }; db_inv.in_Ing_Egr_Inven.Add(Entity_cab); #endregion #region Detalle int sec = 1; foreach (var mov in Lista.Where(q => q.IdEmpresa == item.IdEmpresa && q.IdSucursal == item.IdSucursal && q.IdBodega == item.IdBodega && q.Fecha == item.Fecha && q.cantidad < 0).ToList()) { in_Ing_Egr_Inven_det Entity_det = new in_Ing_Egr_Inven_det { IdEmpresa = Entity_cab.IdEmpresa, IdSucursal = Entity_cab.IdSucursal, IdMovi_inven_tipo = Entity_cab.IdMovi_inven_tipo, IdNumMovi = Entity_cab.IdNumMovi, Secuencia = sec++, IdBodega = mov.IdBodega, IdProducto = mov.IdProducto, dm_cantidad = mov.cantidad, dm_stock_actu = 0, dm_stock_ante = 0, dm_observacion = "", dm_precio = 0, mv_costo = mov.do_precioFinal, dm_peso = 0, IdCentroCosto = mov.IdCentroCosto, IdCentroCosto_sub_centro_costo = mov.IdCentroCosto_sub_centro_costo, IdEstadoAproba = "PEND", IdUnidadMedida = mov.IdUnidadMedida, IdEmpresa_oc = mov.IdEmpresa_oc, IdSucursal_inv = mov.IdSucursal_oc, IdOrdenCompra = mov.IdOrdenCompra, Secuencia_oc = mov.secuencia_oc, Motivo_Aprobacion = "Aprobación movil", dm_cantidad_sinConversion = mov.cantidad, IdUnidadMedida_sinConversion = mov.IdUnidadMedida, mv_costo_sinConversion = mov.do_precioFinal, IdMotivo_Inv = null }; db_inv.in_Ing_Egr_Inven_det.Add(Entity_det); tbl_movimientos_det_apro Entity_apro = new tbl_movimientos_det_apro { IdSincronizacion = mov.IdSincronizacion, IdSecuencia = mov.IdSecuencia, IdEmpresa = mov.IdEmpresa, IdSucursal = mov.IdSucursal, IdMovi_inven_tipo = Entity_cab.IdMovi_inven_tipo, IdNumMovi = Entity_cab.IdNumMovi, Secuencia = Entity_det.Secuencia }; db_mobile.tbl_movimientos_det_apro.Add(Entity_apro); var Entity_sinc = db_mobile.tbl_movimientos_det.Where(q => q.IdSincronizacion == mov.IdSincronizacion && q.IdSecuencia == mov.IdSecuencia).FirstOrDefault().Aprobado = true; } #endregion db_inv.SaveChanges(); db_mobile.SaveChanges(); db_inv.spINV_aprobacion_movimiento(Entity_cab.IdEmpresa, Entity_cab.IdSucursal, Entity_cab.IdMovi_inven_tipo, Entity_cab.IdBodega, Entity_cab.IdNumMovi); } #endregion return(true); } catch (Exception) { db_inv.Dispose(); db_mobile.Dispose(); throw; } }