private void ProcesoRecosteoInventario(in_Ing_Egr_Inven_Info info)
        {
            try
            {
                foreach (var item in info.listIng_Egr)
                {
                    in_producto_Bus  BusProducto = new in_producto_Bus();
                    in_Producto_Info InfoProdu   = BusProducto.Get_info_Product(info.IdEmpresa, item.IdProducto);
                    item.signo = info.signo;

                    if (item.mv_costo_sinConversion == 0 || item.signo == "-")
                    {
                        in_producto_x_tb_bodega_Costo_Historico_Bus  BusProd_x_Costo     = new in_producto_x_tb_bodega_Costo_Historico_Bus();
                        in_producto_x_tb_bodega_Costo_Historico_Info Info_Produc_x_Costo = new in_producto_x_tb_bodega_Costo_Historico_Info();
                        Info_Produc_x_Costo         = BusProd_x_Costo.get_UltimoCosto_x_Producto_Bodega(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(item.IdBodega), item.IdProducto, info.cm_fecha);
                        item.mv_costo               = Info_Produc_x_Costo.costo;
                        item.mv_costo_sinConversion = Info_Produc_x_Costo.costo;
                    }
                    #region Convierte costo y cantidad en la unidad de consumo
                    ValorEquiv          = 0;
                    InfoUni_Equiv       = busUni_Equiv.Get_Info_in_UnidadMedida_Equiv_conversion(item.IdUnidadMedida_sinConversion, InfoProdu.IdUnidadMedida_Consumo);
                    ValorEquiv          = InfoUni_Equiv.valor_equiv == 0 ? 1 : InfoUni_Equiv.valor_equiv;
                    item.dm_cantidad    = item.dm_cantidad_sinConversion * ValorEquiv;
                    item.mv_costo       = item.signo == "-" ? item.mv_costo_sinConversion : (item.mv_costo_sinConversion * item.dm_cantidad_sinConversion) / item.dm_cantidad;
                    item.IdUnidadMedida = InfoProdu.IdUnidadMedida_Consumo;
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "ProcesoRecosteoInventario", ex.Message), ex)
                      {
                          EntityType = typeof(in_Ing_Egr_Inven_Bus)
                      };
            }
        }
        public Boolean ModificarDB(in_Ing_Egr_Inven_Info info, ref string msgs)
        {
            try
            {
                in_Ing_Egr_Inven_det_Data dataDet   = new in_Ing_Egr_Inven_det_Data();
                in_Parametro_Bus          busParam  = new in_Parametro_Bus();
                in_Parametro_Info         infoParam = new in_Parametro_Info();
                string IdEstadoAproba_Param         = "";
                infoParam = busParam.Get_Info_Parametro(info.IdEmpresa);
                if (InfoParam.IdEmpresa == 0)
                {
                    return(false);
                }
                if (info.signo == "+")
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Ing;
                }
                else
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Egr;
                }

                Boolean res = false;

                if (Validar_objeto_IngEgr(info, ref mensaje))
                {
                    //arreglando los id del detalle en caso q no venga sin id
                    foreach (var item in info.listIng_Egr)
                    {
                        item.IdEmpresa         = info.IdEmpresa;
                        item.IdSucursal        = info.IdSucursal;
                        item.IdNumMovi         = info.IdNumMovi;
                        item.IdMovi_inven_tipo = info.IdMovi_inven_tipo;
                        item.signo             = info.signo;

                        in_producto_Bus  BusProducto = new in_producto_Bus();
                        in_Producto_Info InfoProdu   = BusProducto.Get_info_Product(info.IdEmpresa, item.IdProducto);

                        if (item.IdEstadoAproba == null || item.IdEstadoAproba == "")
                        {
                            if (info.signo == "+")
                            {
                                IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Ing;
                            }
                            else
                            {
                                IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Egr;
                            }
                            item.IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);
                        }
                        if (item.IdUnidadMedida_sinConversion == null || item.IdUnidadMedida_sinConversion == "" || item.IdUnidadMedida == null || item.IdUnidadMedida == "")
                        {
                            item.IdUnidadMedida               = InfoProdu.IdUnidadMedida;
                            item.IdUnidadMedida_Consumo       = InfoProdu.IdUnidadMedida_Consumo;
                            item.IdUnidadMedida_sinConversion = InfoProdu.IdUnidadMedida;
                        }
                        if (item.mv_costo_sinConversion == 0 || item.signo == "-")
                        {
                            in_producto_x_tb_bodega_Costo_Historico_Bus  BusProd_x_Costo     = new in_producto_x_tb_bodega_Costo_Historico_Bus();
                            in_producto_x_tb_bodega_Costo_Historico_Info Info_Produc_x_Costo = new in_producto_x_tb_bodega_Costo_Historico_Info();
                            Info_Produc_x_Costo         = BusProd_x_Costo.get_UltimoCosto_x_Producto_Bodega(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(item.IdBodega), item.IdProducto, info.cm_fecha);
                            item.mv_costo               = Info_Produc_x_Costo.costo;
                            item.mv_costo_sinConversion = Info_Produc_x_Costo.costo;
                        }
                        #region Convierte costo y cantidad en la unidad de consumo
                        ValorEquiv          = 0;
                        InfoUni_Equiv       = busUni_Equiv.Get_Info_in_UnidadMedida_Equiv_conversion(item.IdUnidadMedida_sinConversion, InfoProdu.IdUnidadMedida_Consumo);
                        ValorEquiv          = InfoUni_Equiv.valor_equiv == 0 ? 1 : InfoUni_Equiv.valor_equiv;
                        item.dm_cantidad    = item.dm_cantidad_sinConversion * ValorEquiv;
                        item.mv_costo       = item.mv_costo_sinConversion / ValorEquiv;
                        item.IdUnidadMedida = InfoProdu.IdUnidadMedida_Consumo;
                        #endregion
                    }

                    if (dataDet.EliminarDB(info.IdEmpresa, info.IdSucursal, info.IdMovi_inven_tipo, info.IdNumMovi, ref msgs))
                    {
                        info.IdUsuarioUltModi = param.IdUsuario;

                        if (odata.ModificarDB(info, ref msgs))
                        {
                            foreach (var item in info.listIng_Egr)
                            {
                                item.Secuencia      = 0;
                                item.IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);

                                if (item.IdEmpresa == null || item.IdEmpresa == 0)
                                {
                                    item.IdEmpresa = Convert.ToInt32(info.IdEmpresa);
                                }

                                if (item.IdSucursal == null || item.IdSucursal == 0)
                                {
                                    item.IdSucursal = Convert.ToInt32(info.IdSucursal);
                                }

                                if (item.IdBodega == null || item.IdBodega == 0)
                                {
                                    item.IdBodega = Convert.ToInt32(info.IdBodega);
                                }

                                if (item.IdMovi_inven_tipo == null || item.IdMovi_inven_tipo == 0)
                                {
                                    item.IdMovi_inven_tipo = Convert.ToInt32(info.IdMovi_inven_tipo);
                                }

                                if (item.IdNumMovi == null || item.IdNumMovi == 0)
                                {
                                    item.IdNumMovi = Convert.ToInt32(info.IdNumMovi);
                                }
                            }

                            if (dataDet.GuardarDB(info.listIng_Egr))
                            {
                                res = true;
                                res = procesoGenerarMoviInve(info, info.IdNumMovi, ref mensaje);
                            }
                        }
                    }
                }

                return(res);
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "ModificarDB", ex.Message), ex)
                      {
                          EntityType = typeof(in_Ing_Egr_Inven_Bus)
                      };
            }
        }
        public Boolean GuardarDB(in_Ing_Egr_Inven_Info info, ref decimal IdNumMovi, ref string mensaje)
        {
            try
            {
                Boolean res = true;

                InfoParam = busParam.Get_Info_Parametro(info.IdEmpresa);

                if (Validar_objeto_IngEgr(info, ref mensaje))
                {
                    foreach (var item in info.listIng_Egr)
                    {
                        in_producto_Bus  BusProducto = new in_producto_Bus();
                        in_Producto_Info InfoProdu   = BusProducto.Get_info_Product(info.IdEmpresa, item.IdProducto);
                        item.signo = info.signo;

                        if (item.IdEstadoAproba == null || item.IdEstadoAproba == "")
                        {
                            if (info.signo == "+")
                            {
                                IdEstadoAproba_Param = InfoParam.IdEstadoAproba_x_Ing;
                            }
                            else
                            {
                                IdEstadoAproba_Param = InfoParam.IdEstadoAproba_x_Egr;
                            }
                            item.IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);
                        }
                        if (item.IdUnidadMedida_sinConversion == null || item.IdUnidadMedida_sinConversion == "")
                        {
                            item.IdUnidadMedida               = InfoProdu.IdUnidadMedida;
                            item.IdUnidadMedida_Consumo       = InfoProdu.IdUnidadMedida_Consumo;
                            item.IdUnidadMedida_sinConversion = InfoProdu.IdUnidadMedida;
                        }
                        if (/*item.mv_costo_sinConversion == 0 ||*/ item.signo == "-")
                        {
                            in_producto_x_tb_bodega_Costo_Historico_Bus  BusProd_x_Costo     = new in_producto_x_tb_bodega_Costo_Historico_Bus();
                            in_producto_x_tb_bodega_Costo_Historico_Info Info_Produc_x_Costo = new in_producto_x_tb_bodega_Costo_Historico_Info();
                            Info_Produc_x_Costo         = BusProd_x_Costo.get_UltimoCosto_x_Producto_Bodega(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(item.IdBodega), item.IdProducto, info.cm_fecha);
                            item.mv_costo               = Info_Produc_x_Costo.costo;
                            item.mv_costo_sinConversion = Info_Produc_x_Costo.costo;
                        }

                        #region Convierte costo y cantidad en la unidad de consumo
                        ValorEquiv          = 0;
                        InfoUni_Equiv       = busUni_Equiv.Get_Info_in_UnidadMedida_Equiv_conversion(item.IdUnidadMedida_sinConversion, InfoProdu.IdUnidadMedida_Consumo);
                        ValorEquiv          = InfoUni_Equiv.valor_equiv == 0 ? 1 : InfoUni_Equiv.valor_equiv;
                        item.dm_cantidad    = item.dm_cantidad_sinConversion * ValorEquiv;
                        item.mv_costo       = item.signo == "-" ? item.mv_costo_sinConversion : (item.mv_costo_sinConversion * item.dm_cantidad_sinConversion) / item.dm_cantidad;
                        item.IdUnidadMedida = InfoProdu.IdUnidadMedida_Consumo;
                        #endregion
                    }
                    if (res = odata.GuardarDB(info, ref IdNumMovi, ref mensaje))
                    {
                        res = procesoGenerarMoviInve(info, IdNumMovi, ref mensaje);
                    }
                }
                else
                {
                    res = false;
                }

                return(res);
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "GuardarDB", ex.Message), ex)
                      {
                          EntityType = typeof(in_Ing_Egr_Inven_Bus)
                      };
            }
        }