public DatosCOVE InsertaCOVE(DatosCOVE datosCOVE)
 {
     //Insertar en la tabla COVE,
     datosCOVE = InsertaTablaCOVEBd(datosCOVE);
     //Luego en FacturaCOVE un foreac
     //Después en la tabla DetalleFacturaCOVE
     //Al final en la tabla DEDetalleFacturaCOVE
     return(datosCOVE);
 }
        private ConsultaEdocument GenerarLlamado(DatosCOVE datosCOVE, ConsultaEdocumentPor consultarPor)
        {
            var vucem = Util.ServicioVUCEM();
            //var io = FactoryEngine<IOperacionEmpresaDominio>.GetInstance("IOperacionEmpresaDominioConfig");
            var entidad = GenerarLlamadoEspecifico(datosCOVE, consultarPor);

            return(entidad);
            //var response = vucem.ConsultaEdocumentVucem(new ConsultaEdocumentVUCEMRequest());
        }
        private DatosCOVE DameIdXNOCOVEBd(DatosCOVE datosCOVE)
        {
            List <SqlParameterItem> parametros = new List <SqlParameterItem>();

            parametros.Add(new SqlParameterItem("@pNoCOVE", SqlDbType.VarChar, 15, datosCOVE.Request.Edocument));
            parametros.Add(new SqlParameterItem("@pID", SqlDbType.Int, 0, ParameterDirection.Output));
            var vHelper = InicializaConexion(datosCOVE.IdEmpresa);
            var rCove   = vHelper.ExecuteNonQuery("usp_COVE_DameIDxNoCOVE", parametros);

            datosCOVE.Request.ResponseEdocument             = new ConsultaEdocumentResponse();
            datosCOVE.Request.ResponseEdocument.Cove        = new COVE();
            datosCOVE.Request.ResponseEdocument.Cove.IdCOVE = Convert.ToInt16(vHelper.GetParameterOutput("@pID"));
            return(datosCOVE);
        }
        private ConsultaEdocumentVucemResponse1 LlamarAServicioVUCEM(DatosCOVE datosCOVE, ConsultaEdocumentPor consultarPor)
        {
            //pedir a base de datos path y archivo de cer,
            //luego path y archivo de key
            //tambien datos de key y cer.
            var request = new ConsultaEdocumentVucemRequest1()
            {
                request = new ConsultaEdocumentVUCEMRequest()
                {
                    Entidad = GenerarLlamado(datosCOVE, consultarPor)
                }
            };
            var vucem    = Util.ServicioVUCEM();
            var response = vucem.ConsultaEdocumentVucem(request);

            return(response);
        }
        public DatosCOVE GetDataCOVE(DatosCOVE datosCOVE)
        {
            //using (var transaction = new TransactionScope(TransactionScopeOption.Required))
            //{
            var coveExiste = iOperacionEdocumentCoveRepositorio.DameIdXNOCOVE(datosCOVE);

            if (coveExiste.Request.ResponseEdocument.Cove.IdCOVE == 0)
            {
                //llamar a servicio VUCEM con CERKEY de Empresa
                var response = LlamarAServicioVUCEM(datosCOVE, ConsultaEdocumentPor.Empresa);
                if (response.ConsultaEdocumentVucemResult.Entidad != null)
                {
                    datosCOVE.Request = response.ConsultaEdocumentVucemResult.Entidad;
                    datosCOVE.Request.ResponseEdocument.Cove.XML = SubirArchivoXMLaFTP(datosCOVE.IdEmpresa, datosCOVE.IdPatente,
                                                                                       Util.GetXmlBytes(coveExiste.Request.ResponseEdocument), datosCOVE.Request.Edocument);
                }
                else
                {
                    var response2 = LlamarAServicioVUCEM(datosCOVE, ConsultaEdocumentPor.Patente);
                    if (response2.ConsultaEdocumentVucemResult.Entidad != null)
                    {
                        datosCOVE.Request = response2.ConsultaEdocumentVucemResult.Entidad;
                        datosCOVE.Request.ResponseEdocument.Cove.XML = SubirArchivoXMLaFTP(datosCOVE.IdEmpresa, datosCOVE.IdPatente,
                                                                                           Util.GetXmlBytes(coveExiste.Request.ResponseEdocument), datosCOVE.Request.Edocument);
                    }
                    else
                    {
                        throw new NoSePudoExtraerElCove();
                    }
                }
                datosCOVE = iOperacionEdocumentCoveRepositorio.InsertaCOVE(datosCOVE);
                if (datosCOVE.Request.ResponseEdocument.Cove.IdCOVE != 0)
                {
                    iOperacionEdocumentCoveRepositorio.CierraCove(datosCOVE.IdEmpresa, datosCOVE.IdBitacoraCOVE,
                                                                  datosCOVE.Request.ResponseEdocument.Cove.IdCOVE);
                }
                else
                {
                    throw new NoSeInsertoCoveEnBaseDeDatos();
                }
                //trae respuesta vacía throw
            }
            //    transaction.Complete();
            //}
            return(datosCOVE);
        }
        private DatosCOVE InsertaTablaCOVEBd(DatosCOVE datosCOVE)
        {
            List <SqlParameterItem> parametros = new List <SqlParameterItem>();

            parametros.Add(new SqlParameterItem("@pIdAduanaVW", SqlDbType.Int, 0));
            //parametros.Add(new SqlParameterItem("@pTimeStamp", SqlDbType.DateTime, DateTime.Now));//
            parametros.Add(new SqlParameterItem("@pIdPaisCompradorVendedor", SqlDbType.Int, 0));
            parametros.Add(new SqlParameterItem("@pEDocument", SqlDbType.VarChar, 15, datosCOVE.Request.ResponseEdocument.Cove.Edocument)); //
            parametros.Add(new SqlParameterItem("@pXML", SqlDbType.VarChar, 200, datosCOVE.Request.ResponseEdocument.Cove.XML));            //
            parametros.Add(new SqlParameterItem("@pPDF", SqlDbType.VarChar, 200, datosCOVE.Request.ResponseEdocument.Cove.PDF));

            parametros.Add(new SqlParameterItem("@pTipoOperacion", SqlDbType.VarChar, 50, datosCOVE.Request.ResponseEdocument.Cove.TipoOperacion)); //
            parametros.Add(new SqlParameterItem("@pFechaExpedicion", SqlDbType.Date, datosCOVE.Request.ResponseEdocument.Cove.FechaExpedicion));    //
            //parametros.Add(new SqlParameterItem("@pNumeroFactura", SqlDbType.VarChar, 30, pNumerofactura));//lista
            //parametros.Add(new SqlParameterItem("@pNombreEmisor", SqlDbType.VarChar, 200, pNombreEmisor));//
            //parametros.Add(new SqlParameterItem("@pIdentificadorEmisor", SqlDbType.VarChar, 50, pIdentificadorEmisor));//
            //parametros.Add(new SqlParameterItem("@pNombreDestinatario", SqlDbType.VarChar, 200, pNombreDestinatario));//
            //parametros.Add(new SqlParameterItem("@pIdentificadorDestinatar", SqlDbType.VarChar, 50, pIdentificadorDestinatario));//
            //parametros.Add(new SqlParameterItem("@pCertificadoOrigen", SqlDbType.Bit, pCertificadoOrigen));//NO VA
            parametros.Add(new SqlParameterItem("@pSumaValorTotal", SqlDbType.Float, 0));
            parametros.Add(new SqlParameterItem("@pIdEmpresa", SqlDbType.Int, datosCOVE.IdEmpresa));
            parametros.Add(new SqlParameterItem("@pID", SqlDbType.Int, 0, ParameterDirection.Output));
            var vHelper = InicializaConexion(datosCOVE.IdEmpresa);
            var rCove   = vHelper.ExecuteNonQuery("usp_COVE_Inserta", parametros);//duda false

            datosCOVE.Request.ResponseEdocument.Cove.IdCOVE = Convert.ToInt16(vHelper.GetParameterOutput("@pID"));
            //Insertar lista de patentes
            foreach (var patente in datosCOVE.Request.ResponseEdocument.Cove.PatentesAduanales)
            {
                InsertaPatenteXCOVE(patente, datosCOVE.Request.ResponseEdocument.Cove.IdCOVE, datosCOVE.IdEmpresa);
            }
            for (int i = 0; i < datosCOVE.Request.ResponseEdocument.Cove.Facturas.Count(); i++)
            {
                datosCOVE.Request.ResponseEdocument.Cove.Facturas[i] =
                    InsertaFacturaCOVE(datosCOVE.Request.ResponseEdocument.Cove.Facturas[i],
                                       datosCOVE.Request.ResponseEdocument.Cove.IdCOVE, datosCOVE.IdUsuario, datosCOVE.IdEmpresa);
            }
            return(datosCOVE);
        }
        private ConsultaEdocument GenerarLlamadoEspecifico(DatosCOVE datosCOVE, ConsultaEdocumentPor consultaPor)
        {
            //var vucem = Util.ServicioVUCEM();
            var io = FactoryEngine <IOperacionEmpresaDominio> .GetInstance("IOperacionEmpresaDominioConfig");

            var entidad = new ConsultaEdocument();

            switch (consultaPor)
            {
            case ConsultaEdocumentPor.Empresa:
                var req = new EntidadEmpresa()
                {
                    OperacionEspecifica = OperacionEmpresaItem.DameDatosEmpresaXId,
                    DatosEmpresa        = new Empresa()
                    {
                        IdEmpresaVw = datosCOVE.IdEmpresa
                    },
                    DatosPatente = new Patente()
                    {
                        IdPatente = datosCOVE.IdPatente
                    }
                };
                var response = io.OperacionEmpresaItem(req);
                entidad = new ConsultaEdocument()
                {
                    ArchivoCer      = GetArchivoCerKey(ConvertirEmpresaToArchivoCer(response.DatosEmpresa)),
                    ArchivoKey      = GetArchivoCerKey(ConvertirEmpresaToArchivoKey(response.DatosEmpresa)),
                    Edocument       = datosCOVE.Request.Edocument.Trim(),
                    RFC             = response.DatosEmpresa.RFC.Trim(),
                    PasswordCerKey  = response.DatosEmpresa.PasswordCertificado.Trim(),
                    PasswordWSVucem = response.DatosEmpresa.WebKeyVUCEM.Trim()
                };
                break;

            case ConsultaEdocumentPor.Patente:
                req = new EntidadEmpresa()
                {
                    OperacionEspecifica = OperacionEmpresaItem.DameDatosPatenteXId,
                    DatosEmpresa        = new Empresa()
                    {
                        IdEmpresaVw = datosCOVE.IdEmpresa
                    },
                    DatosPatente = new Patente()
                    {
                        IdPatente = datosCOVE.IdPatente
                    }
                };
                response = io.OperacionEmpresaItem(req);
                entidad  = new ConsultaEdocument()
                {
                    ArchivoCer      = GetArchivoCerKey(ConvertirPatenteToArchivoCer(response.DatosPatente)),
                    ArchivoKey      = GetArchivoCerKey(ConvertirPatenteToArchivoKey(response.DatosPatente)),
                    Edocument       = datosCOVE.Request.Edocument.Trim(),
                    RFC             = response.DatosPatente.RFC.Trim(),
                    PasswordCerKey  = response.DatosPatente.PasswordKey.Trim(),
                    PasswordWSVucem = response.DatosPatente.WebKeyVUCEM.Trim()
                };
                break;
            }
            return(entidad);
            //var response = vucem.ConsultaEdocumentVucem(new ConsultaEdocumentVUCEMRequest());
        }
 public DatosCOVE DameIdXNOCOVE(DatosCOVE datosCOVE)
 {
     return(DameIdXNOCOVEBd(datosCOVE));
 }