public Boolean GrabarDB(ref caj_Caja_Movimiento_Info info, ref string MensajeError)
        {
            try
            {
                Boolean res = true;
                // grabar diario caja
                ct_Cbtecble_Bus CbteCble_Data = new ct_Cbtecble_Bus();
                decimal         idCbteCble    = 0;

                if (CbteCble_Data.GrabarDB(info.Info_CbteCble_x_Caja_Movi, ref idCbteCble, ref MensajeError))
                {
                    //  GrabarDB caja
                    info.IdCbteCble = idCbteCble;
                    info.IdTipocbte = info.Info_CbteCble_x_Caja_Movi.IdTipoCbte;
                    string IdTipo_Docu = string.Empty;
                    if (info.cm_Signo == "+")
                    {
                        IdTipo_Docu = "RECIB_CAJA";
                    }
                    else
                    {
                        IdTipo_Docu = "VALE_CAJA";
                    }

                    info.IdPeriodo = info.Info_CbteCble_x_Caja_Movi.IdPeriodo;
                    if (data.GrabarDB(info, ref MensajeError))
                    {
                        string mensaje = "";
                        cp_orden_pago_cancelaciones_Bus bus_pagoCance = new cp_orden_pago_cancelaciones_Bus();

                        foreach (var item in info.List_OrdenCan)
                        {
                            if (item.IdOrdenPago_op > 0)
                            {
                                item.IdEmpresa_pago  = info.Info_CbteCble_x_Caja_Movi.IdEmpresa;
                                item.IdCbteCble_pago = idCbteCble;
                                item.IdTipoCbte_pago = info.Info_CbteCble_x_Caja_Movi.IdTipoCbte;
                                bus_pagoCance.GuardarDB(item, info.Info_CbteCble_x_Caja_Movi.IdEmpresa, ref mensaje);
                            }
                            else
                            {
                                //// no hay OP hay q generarla
                                cp_orden_pago_Bus             BusOP            = new cp_orden_pago_Bus();
                                cp_orden_pago_Info            InfoOP           = new cp_orden_pago_Info();
                                cp_orden_pago_det_Info        Info_det_OP      = new cp_orden_pago_det_Info();
                                List <cp_orden_pago_det_Info> List_Info_det_OP = new List <cp_orden_pago_det_Info>();
                                decimal IdOP = 0;

                                InfoOP.IdEmpresa          = info.Info_CbteCble_x_Caja_Movi.IdEmpresa;
                                InfoOP.IdEntidad          = Convert.ToDecimal(item.IdEntidad);
                                InfoOP.IdEstadoAprobacion = "APRO";
                                InfoOP.IdFormaPago        = "EFEC";
                                InfoOP.IdTipo_Persona     = item.IdTipo_Persona;
                                InfoOP.IdOrdenPago        = 0;
                                InfoOP.IdPersona          = item.IdPersona;
                                InfoOP.IdTipo_op          = item.IdTipo_op;
                                InfoOP.Observacion        = "O/P x Generada por Cruze con EG/Cja..";
                                InfoOP.Saldo           = 0;
                                InfoOP.Total_cancelado = Convert.ToDecimal(item.MontoAplicado);
                                InfoOP.Total_OP        = Convert.ToDecimal(item.MontoAplicado);

                                /////////////

                                Info_det_OP.IdEmpresa   = InfoOP.IdEmpresa;
                                Info_det_OP.IdOrdenPago = 0;
                                Info_det_OP.Secuencia   = 1;

                                Info_det_OP.IdEmpresa_cxp  = item.IdEmpresa_cxp;
                                Info_det_OP.IdTipoCbte_cxp = item.IdTipoCbte_cxp;
                                Info_det_OP.IdCbteCble_cxp = item.IdCbteCble_cxp;

                                Info_det_OP.Valor_a_pagar = item.MontoAplicado;
                                Info_det_OP.Referencia    = "";

                                Info_det_OP.IdFormaPago        = "EFEC";
                                Info_det_OP.Fecha_Pago         = DateTime.Now;
                                Info_det_OP.IdEstadoAprobacion = "APRO";

                                Info_det_OP.Idbanco = 1;

                                Info_det_OP.IdUsuario_Aproba  = "";
                                Info_det_OP.fecha_hora_Aproba = DateTime.Now;
                                Info_det_OP.Motivo_aproba     = "x conciliacion con NC cxp";

                                List_Info_det_OP.Add(Info_det_OP);
                                InfoOP.Detalle = List_Info_det_OP;

                                BusOP.GuardaDB(InfoOP, ref IdOP, ref mensaje);



                                item.IdEmpresa_pago  = info.Info_CbteCble_x_Caja_Movi.IdEmpresa;
                                item.IdCbteCble_pago = info.Info_CbteCble_x_Caja_Movi.IdCbteCble;
                                item.IdTipoCbte_pago = info.Info_CbteCble_x_Caja_Movi.IdTipoCbte;
                                item.IdEmpresa_op    = InfoOP.IdEmpresa;
                                item.IdOrdenPago_op  = IdOP;
                                item.Secuencia_op    = Info_det_OP.Secuencia;
                                item.Observacion     = "Cruze /Egr Caja";
                                bus_pagoCance.GuardarDB(item, info.Info_CbteCble_x_Caja_Movi.IdEmpresa, ref mensaje);

                                //info.DetalleMovCaja

                                caj_Caja_Movimiento_det_Bus BusDetCaja = new caj_Caja_Movimiento_det_Bus();
                                BusDetCaja.ModificarDB_IdOP_x_Det(info.Info_CbteCble_x_Caja_Movi.IdEmpresa, info.Info_CbteCble_x_Caja_Movi.IdCbteCble, info.Info_CbteCble_x_Caja_Movi.IdTipoCbte, item.Secuencia, InfoOP.IdEmpresa, IdOP, ref mensaje);
                            }
                        }
                    }
                    else
                    {
                        res = false;
                    }
                }
                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("", "GrabarDB", ex.Message), ex)
                      {
                          EntityType = typeof(caj_Caja_Movimiento_Bus)
                      };
            }
        }