예제 #1
0
        public void Solicitar(int sucursalId, DateTime fecha)
        {
            var sucursal = _db.Sucursales.Find(sucursalId);
            var url      = String.Format("https://{0}/xsamanager/DownloadExpedidosBloqueServlet?rfcEmisor={1}&key={2}&fechaInicial={3}&fechaFinal={4}&tipo={5}", sucursal.Servidor, sucursal.Rfc, sucursal.KeyXsa, fecha.ToString("yyyy-MM-dd"), fecha.AddDays(1).ToString("yyyy-MM-dd"), "XML");

            ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };
            using (WebClient client = new WebClient())
            {
                var path          = Path.Combine(@"C:\inetpub\sftproot\ApBox\");
                var nombreArchivo = String.Format("{0}_{1:yyyy-MM-dd}.zip", sucursal.Rfc, fecha);
                var pathFinal     = Path.Combine(path, nombreArchivo);

                try
                {
                    client.DownloadFile(url, pathFinal);
                    ExtraerZip(pathFinal);

                    var pathTexto = Path.Combine(path, "leeme.txt");
                    File.Delete(pathFinal);
                    if (File.Exists(pathTexto))
                    {
                        File.Delete(pathTexto);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("No se pudo descargar el archivo del web service {0}: {1}", url, ex.Message));
                }
            }

            sucursal.FechaInicial     = fecha;
            _db.Entry(sucursal).State = EntityState.Modified;
            _db.SaveChanges();
        }
예제 #2
0
        public string Autorizar(int solicitudAccesoId)
        {
            var solicitudAcceso = _db.SolicitudesAccesos.Find(solicitudAccesoId);

            solicitudAcceso.Procesado        = true;
            _db.Entry(solicitudAcceso).State = EntityState.Modified;
            _db.SaveChanges();

            var proveedor = new Proveedor
            {
                CodigoPostal = solicitudAcceso.CodigoPostal,
                Email        = solicitudAcceso.Email,
                FechaAlta    = solicitudAcceso.FechaAlta,
                PaginaWeb    = solicitudAcceso.PaginaWeb,
                Pais         = solicitudAcceso.Pais,
                RazonSocial  = solicitudAcceso.RazonSocial,
                Rfc          = solicitudAcceso.Rfc,
                Saldo        = solicitudAcceso.Saldo,
                Status       = solicitudAcceso.Status,
                Telefono1    = solicitudAcceso.Telefono1,
                Telefono2    = solicitudAcceso.Telefono2,
                GrupoId      = solicitudAcceso.GrupoId
            };

            _db.Proveedores.Add(proveedor);
            _db.SaveChanges();

            //Asignar Sucursales
            var sucursalesGrupo = _db.Sucursales.Where(s => s.GrupoId == solicitudAcceso.GrupoId && s.Status == Status.Activo);

            foreach (var sucursalGrupo in sucursalesGrupo)
            {
                var proveedorSucursal = new ProveedorSucursal
                {
                    ProveedorId = proveedor.Id,
                    SucursalId  = sucursalGrupo.Id
                };
                _db.ProveedoresSucursales.Add(proveedorSucursal);
            }
            _db.SaveChanges();

            //TODO: Enviar Correo

            return(proveedor.Rfc);
        }
예제 #3
0
        public void Autorizar(bool autorizar, int facturaRecibidaId, int usuarioId, String notasAutorizacion)
        {
            var facturaRecibida = _db.FacturasRecibidas.Find(facturaRecibidaId);

            facturaRecibida.Autorizada            = autorizar;
            facturaRecibida.UsuarioAutorizacionId = usuarioId;
            facturaRecibida.FechaAutorizacion     = DateTime.Now;
            facturaRecibida.NotasAutorizacion     = notasAutorizacion;

            _db.Entry(facturaRecibida).State = System.Data.Entity.EntityState.Modified;
            _db.SaveChanges();
        }
예제 #4
0
        public byte[] GenerarComplementoPago(int sucursalId, int complementoPagoId, string mailAlterno)
        {
            lock (obj)
            {
                var sucursal        = _db.Sucursales.Find(sucursalId);
                var complementoPago = _db.ComplementosPago.Find(complementoPagoId);
                var cliente         = _db.Clientes.Find(complementoPago.ReceptorId);

                //Generación del comprobante
                var facturaDto = _generarDto.GenerarFactura(sucursal, cliente);
                facturaDto.ComplementoPagoDto = _generarDto.GenerarComplemento(complementoPago);
                _generarDto.CfdisRelacionados(ref facturaDto, complementoPago);

                try
                {
                    _facturacionInfodextra.GenerarXml(ref facturaDto);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                var facturaId = GuardarComprobante(facturaDto, sucursalId, complementoPago.ReceptorId);

                try
                {
                    //Incrementar Folio de Sucursal
                    sucursal.Folio           += 1;
                    _db.Entry(sucursal).State = EntityState.Modified;

                    _db.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    var errores = new List <String>();
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            errores.Add(String.Format("Propiedad: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                        }
                    }
                    throw new Exception(string.Join(",", errores.ToArray()));
                }

                MarcarFacturado(complementoPago.Id, facturaId);

                try
                {
                    var pathXml = String.Format(@"C:\Infodextra\Temp\{0} - {1} - {2}.xml", facturaDto.Serie, facturaDto.Folio, DateTime.Now.ToString("ddMMyyyyHHmmss"));
                    _operacionesStreams.ByteArrayArchivo(facturaDto.Xml, pathXml);
                    var pathPdf = GenerarPdf(facturaDto.Xml, complementoPago);
                    EnviarCorreo(cliente, new List <string> {
                        pathXml, pathPdf
                    }, mailAlterno);
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("El comprobante se timbró de forma exitosa pero no fue posible mandarlo por correo electrónico, el motivo: {0}", ex.Message));
                }

                return(facturaDto.Xml);
            }
        }