public ActionResult CargaGeneral(CargasCfdisModel cargasCfdisModel) { PopulaForma(cargasCfdisModel.DepartamentoId, cargasCfdisModel.CentroCostoId); ModelState.Remove("Archivos"); var sucursalId = ObtenerSucursal(); var sucursal = _db.Sucursales.Find(sucursalId); if (ModelState.IsValid) { if (Request.Files.Count == 0) { ModelState.AddModelError("", "Sin archivos para procesar"); return(View()); } try { var facturaRecibida = new FacturaRecibida(); PopularArchivos(ref facturaRecibida); var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml); _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura); _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura); var rfcReceptor = facturaRecibida.Receptor.Rfc; facturaRecibida.Receptor = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor); facturaRecibida.DepartamentoId = cargasCfdisModel.DepartamentoId; facturaRecibida.CentroCostoId = cargasCfdisModel.CentroCostoId; facturaRecibida.UsuarioId = ObtenerUsuario(); //Validaciones _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal()); facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc); //Guardar factura try { _guardaFacturas.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), TiposGastos.Personal); _db.SaveChanges(); } catch (Exception ex) { ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message)); return(View()); } } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return(View()); } } return(View()); }
public ActionResult Validaciones(FacturasModel facturasModel) { ModelState.Remove("Archivos"); var sucursalId = ObtenerSucursal(); var sucursal = _db.Sucursales.Find(sucursalId); facturasModel = new FacturasModel { FacturasRecibidas = _db.FacturasRecibidas.Where(fp => fp.ReceptorId == sucursalId).OrderBy(fp => fp.Emisor.RazonSocial).ThenByDescending(vf => vf.Fecha).ToList() }; if (ModelState.IsValid) { if (Request.Files.Count == 0) { ModelState.AddModelError("", "Sin archivos para procesar"); return(View(facturasModel)); } try { var facturaRecibida = new FacturaRecibida(); PopularArchivos(ref facturaRecibida); var pathFactura = Path.Combine(Server.MapPath("~/Archivos/Validaciones/"), facturaRecibida.NombreArchivoXml); _operacionesStreams.ByteArrayArchivo(facturaRecibida.ArchivoFisicoXml, pathFactura); _decodificaFacturas.DecodificarFactura(ref facturaRecibida, pathFactura); var rfcReceptor = facturaRecibida.Receptor.Rfc; facturaRecibida.Receptor = _db.Sucursales.FirstOrDefault(s => s.Rfc == rfcReceptor); //Validaciones _validacionesFacturas.Negocios(facturaRecibida, ObtenerSucursal()); facturaRecibida.Validacion = _validacionesFacturas.Sat(pathFactura, facturaRecibida.Receptor.Rfc); //Guardar factura try { _guarda.GuardarFacturaRecibida(facturaRecibida, ObtenerSucursal(), API.Enums.TiposGastos.Proveedores); _db.SaveChanges(); } catch (Exception ex) { ModelState.AddModelError("", String.Format("No se pudo guardar la factura {0}", ex.Message)); return(View(facturasModel)); } } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return(View(facturasModel)); } return(RedirectToAction("Validaciones")); } return(View(facturasModel)); }
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); } }