/// <summary> /// Aplica un filtro predeterminado del pais actual, si la clase tiene el atributo correspondiente /// </summary> private void FiltrarVistaPorPais() { if (!(View is ListView)) { return; } var typeInfo = View.ObjectTypeInfo; var filtroPorPaisAttribute = typeInfo.FindAttributes <FiltroPorPaisAttribute>().Any(c => c.Filtrar); var paisPredeterminado = Identificadores.GetInstance(ObjectSpace).PaisPredeterminado; if (!filtroPorPaisAttribute || paisPredeterminado == null) { return; } if (typeInfo.FindMember("Pais") != null) { ((ListView)View).CollectionSource.Criteria["filtro_pais_actual"] = new GroupOperator(GroupOperatorType.Or, new BinaryOperator("Pais.Oid", paisPredeterminado.Oid, BinaryOperatorType.Equal), new NullOperator("Pais")); } else if (typeInfo.FindMember("NacimientoPais") != null) { ((ListView)View).CollectionSource.Criteria["filtro_pais_actual"] = new GroupOperator(GroupOperatorType.Or, new BinaryOperator("NacimientoPais.Oid", paisPredeterminado.Oid, BinaryOperatorType.Equal), new NullOperator("NacimientoPais")); } }
private void recuperarAutorizacionAction_Execute(object sender, SimpleActionExecuteEventArgs e) { //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB var objSpace = ( XPObjectSpace )Application.CreateObjectSpace( ); var identificadores = Identificadores.GetInstance(objSpace); if (identificadores.FacturaElectronicaEnte == null) { throw new Exception("Ente de factura electrónica no definida para esta empresa"); } var sesionWsfe = identificadores.FacturaElectronicaEnte.GetSesion(Sesion.ServicioWSFE); objSpace.CommitChanges( ); var comprobante = ( Comprobante )View.CurrentObject; //if ( comprobante.AutorizadaResultado == "A" ) // throw new Exception( "Comprobante ya autorizado" ); var request = new FECompConsultaReq { CbteNro = comprobante.Numero, CbteTipo = Convert.ToInt32(((ComprobanteTipo)comprobante.Tipo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)).Codigo), PtoVta = comprobante.Sector }; var resp = ConsultarAutorizacion(sesionWsfe, request); if (resp.Errors != null && resp.Errors.Count > 0) { var err = resp.Errors.Aggregate("", (current, error) => current + (error.Code + " - " + error.Msg + "\n")); //TODO errores de Encoding. No encontre otra manera de arreglarlo err = err.Replace("ó", "ó").Replace("ú", "ú"); comprobante.AutorizadaNotas = err; throw new Exception("Error en la operación:\n" + err); } if (resp.ResultGet == null) { throw new Exception("Error en la operación:\nNo se obtuvieron datos para la consulta"); } comprobante.AutorizadaResultado = resp.ResultGet.Resultado; comprobante.AutorizadaNotas = ""; if (resp.ResultGet.Observaciones != null && resp.ResultGet.Observaciones.Count > 0) { var obs = resp.ResultGet.Observaciones.Aggregate("", (current, observacion) => current + (observacion.Code + " - " + observacion.Msg + "\n")); comprobante.AutorizadaNotas += obs; } comprobante.AutorizadaCodigo = resp.ResultGet.CodAutorizacion; if (!string.IsNullOrWhiteSpace(resp.ResultGet.FchVto)) { comprobante.AutorizadaCodigoFecVto = new DateTime(Convert.ToInt32(resp.ResultGet.FchVto.Substring(0, 4)), Convert.ToInt32(resp.ResultGet.FchVto.Substring(4, 2)), Convert.ToInt32(resp.ResultGet.FchVto.Substring(6, 2))); } }
public override void AfterConstruction() { base.AfterConstruction(); Tipo = TipoPersona.Fisica; if (CoreAppLogonParameters.Instance.EmpresaActual(Session) != null) { NacimientoPais = Identificadores.GetInstance(Session).PaisPredeterminado; } }
public override void AfterConstruction( ) { base.AfterConstruction( ); Especie = Identificadores.GetInstance(Session).EspeciePredeterminada; Fecha = DateTime.Today; CantidadCuotas = 1; Cambio = 1; ConceptosIncluidos = ConceptosIncluidos.Productos; }
private void NewObjectViewController_ObjectCreated(object sender, ObjectCreatedEventArgs e) { if (!(e.CreatedObject is Documento)) { return; } var objectSpace = e.ObjectSpace; var nuevoDocumento = ( Documento )e.CreatedObject; //Al inicializar un nuevo objeto Documento, encapsularlo en una nueva Poliza, y este a su vez en una nueva Carpeta //(cuando comienza un nuevo negocio desde cero) var identif = Identificadores.GetInstance(objectSpace); nuevoDocumento.Tipo = objectSpace.FindObject <DocumentoTipo>(CriteriaOperator.Parse("Clase = 'Poliza'")); nuevoDocumento.Poliza = objectSpace.CreateObject <Poliza>( ); nuevoDocumento.Poliza.Carpeta = objectSpace.CreateObject <Carpeta>( ); var interviniente = objectSpace.CreateObject <DocumentoInterviniente>( ); interviniente.Rol = identif.RolAseguradora; interviniente.Participacion = 100; interviniente.Principal = true; nuevoDocumento.Intervinientes.Add(interviniente); nuevoDocumento.Poliza.Aseguradora = interviniente; interviniente = objectSpace.CreateObject <DocumentoInterviniente>( ); interviniente.Rol = identif.RolTomador; interviniente.Participacion = 100; interviniente.Principal = true; nuevoDocumento.Poliza.Tomador = interviniente; interviniente = objectSpace.CreateObject <DocumentoInterviniente>( ); interviniente.Rol = identif.RolOrganizador; interviniente.Participacion = 100; interviniente.Principal = true; interviniente.Interviniente = CoreAppLogonParameters.Instance.EmpresaActual(objectSpace).Persona; nuevoDocumento.Poliza.Organizador = interviniente; /*interv = e.ObjectSpace.CreateObject< DocumentoInterviniente >( ); * interv.Rol = ident.RolProductor; * interv.Participacion = 100; * interv.Principal = true; * nuevoDoc.Poliza.Productor = interv;*/ nuevoDocumento.Intervinientes.Add(nuevoDocumento.Poliza.Aseguradora); nuevoDocumento.Intervinientes.Add(nuevoDocumento.Poliza.Tomador); nuevoDocumento.Intervinientes.Add(nuevoDocumento.Poliza.Organizador); //nuevoDoc.Intervinientes.Add( nuevoDoc.Poliza.Productor ); }
protected override void GenerarPagoAnticipo(Dictionary <int, decimal> saldos) { //TODO: dependencia fuerte a XPO var session = (( XPObjectSpace )ObjectSpace).Session; var identificadores = Identificadores.GetInstance(ObjectSpace); var anticipoComprobanteTipo = identificadores.AnticipoComprobanteTipo; var anticipoConcepto = identificadores.AnticipoConcepto; var anticipoCuenta = identificadores.AnticipoCuenta; var empresaActual = CoreAppLogonParameters.Instance.EmpresaActual(ObjectSpace); var especiePredeterminada = Core.Fondos.Identificadores.GetInstance(ObjectSpace).EspeciePredeterminada; if (anticipoComprobanteTipo == null || anticipoConcepto == null || anticipoCuenta == null || especiePredeterminada == null) { throw new UserFriendlyException("Faltan valores de configuración para la generación de anticipos. Por favor revise."); } var compAnticipo = ObjectSpace.CreateObject <Comprobante>( ); var ordenPago = ( OrdenPago )View.CurrentObject; var originante = ordenPago.Destinatario; var ultimoNumero = session.Evaluate <Comprobante>(CriteriaOperator.Parse("MAX(Numero)"), CriteriaOperator.Parse("Originante = ? AND Tipo = ? AND Sector = 1", originante, anticipoComprobanteTipo)); ultimoNumero = ultimoNumero != null ? ( int )ultimoNumero + 1 : 1; compAnticipo.Empresa = empresaActual; compAnticipo.Sector = 1; compAnticipo.Numero = ( int )ultimoNumero; compAnticipo.Destinatario = empresaActual.Persona; compAnticipo.Originante = originante; compAnticipo.Cuenta = anticipoCuenta; compAnticipo.Especie = especiePredeterminada; compAnticipo.Cambio = 1; decimal valorTotalLocalAnticipo = 0; foreach (var saldo in saldos) { if (saldo.Key == especiePredeterminada.Oid) { valorTotalLocalAnticipo += saldo.Value; } else { var itm = ordenPago.Items.FirstOrDefault(item => item.Especie.Moneda.Oid == saldo.Key); if (itm == null) //nunca deberia pasar esto { throw new UserFriendlyException("No se pudo convertir el saldo del pago, a un anticipo en moneda local."); } valorTotalLocalAnticipo += saldo.Value * itm.Cambio; } } var comprobanteItem = ObjectSpace.CreateObject <ComprobanteItem>( ); comprobanteItem.Cantidad = 1; comprobanteItem.Concepto = anticipoConcepto; comprobanteItem.PrecioUnitario = valorTotalLocalAnticipo; compAnticipo.Items.Add(comprobanteItem); ordenPago.ComprobanteAnticipo = compAnticipo; }
private void reversarAction_Execute(object sender, SimpleActionExecuteEventArgs e) { var selectedComprobantes = View.SelectedObjects; if (selectedComprobantes.Count == 0) { throw new UserFriendlyException("Seleccione al menos un comprobante"); } var mensajes = ""; var cloner = new BasicObjectCloner(true); foreach (Comprobante comprobante in selectedComprobantes) { try { if (comprobante.Estado != ComprobanteEstado.Confirmado) { throw new UserFriendlyException("No puede reversar un comprobante no confirmado."); } if (comprobante.ComprobanteReversion != null) { throw new UserFriendlyException("El comprobante ya se encuentra reversado."); } comprobante.SetIgnoreOnChangedRecursive(true); var copy = ( Comprobante )cloner.CloneTo(comprobante, typeof(Comprobante)); copy.Estado = ComprobanteEstado.Pendiente; copy.Fecha = DateTime.Today; var patronLeyendaReversado = Identificadores.GetInstance(ObjectSpace).PatronConceptoReversado; if (!string.IsNullOrEmpty(patronLeyendaReversado)) { copy.Concepto = string.Format(patronLeyendaReversado, copy.Concepto); } copy.ComprobanteReversion = null; copy.Numero = 0; foreach (var item in copy.Items) { item.DebeHaber = item.DebeHaber == DebeHaber.Debe ? DebeHaber.Haber : DebeHaber.Debe; } copy.Save( ); comprobante.ComprobanteReversion = copy; comprobante.Save( ); ConfirmarComprobante(copy); } catch (Exception exc) { mensajes += "\n" + comprobante.Descripcion + ": " + exc.Message; } } ObjectSpace.CommitChanges( ); if (mensajes != "") { throw new UserFriendlyException("Errores en el reversado de uno o más comprobantes:" + mensajes); } View.Refresh( ); }
private void ComprobanteController_ComprobanteAutorizando(object sender, ComprobanteAutorizandoArgs args) { var comprobante = ( Comprobante )args.Comprobante; if (!Convert.ToBoolean(comprobante.Talonario.GetMemberValue(AFIPWsMtxcaModule.PropertyNameFacturaElectronicaMtxca))) { return; } //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB var objSpace = Application.CreateObjectSpace( ); var identificadores = Identificadores.GetInstance(objSpace); if (identificadores.FacturaElectronicaEnte == null) { throw new Exception("Ente de factura electrónica no definida para esta empresa"); } var sesionWsmtxca = identificadores.FacturaElectronicaEnte.GetSesion(ServiceName); objSpace.CommitChanges( ); if (comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada) { throw new Exception("Comprobante ya autorizado por la AFIP"); } ComprobanteCAEResponseType comprobanteResponse; CodigoDescripcionType[] arrayObservaciones; CodigoDescripcionType[] arrayErrores; CodigoDescripcionType evento; var resp = service.autorizarComprobante(GetAuth(sesionWsmtxca), GetComprobanteType(( Comprobante )sender), out comprobanteResponse, out arrayObservaciones, out arrayErrores, out evento); comprobante.AutorizadaNotas = ""; if (arrayErrores != null && arrayErrores.Length > 0) { var err = arrayErrores.Aggregate("", (current, error) => current + (error.codigo + " - " + error.descripcion + "\n")); //TODO errores de Encoding. No encontre otra manera de arreglarlo err = err.Replace("ó", "ó").Replace("ú", "ú"); comprobante.AutorizadaNotas = err; throw new Exception("Error de autorización:\n" + err); } if (comprobanteResponse == null) { throw new Exception("Error de autorización:\nNo se obtuvieron datos"); } comprobante.AutorizadaResultado = resp.ToString( ); if (arrayObservaciones != null && arrayObservaciones.Length > 0) { var obs = arrayObservaciones.Aggregate("", (current, observacion) => current + (observacion.codigo + " - " + observacion.descripcion + "\n")); comprobante.AutorizadaNotas += obs; } comprobante.AutorizadaCodigo = comprobanteResponse.CAE.ToString( ); comprobante.AutorizadaCodigoFecVto = comprobanteResponse.fechaVencimientoCAE; args.Autorizado = comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada; }
private void recuperarAutorizacionAction_Execute(object sender, SimpleActionExecuteEventArgs e) { //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB var objSpace = ( XPObjectSpace )Application.CreateObjectSpace( ); var identificadores = Identificadores.GetInstance(objSpace); if (identificadores.FacturaElectronicaEnte == null) { throw new Exception("Ente de factura electrónica no definida para esta empresa"); } var sesionWsmtxca = identificadores.FacturaElectronicaEnte.GetSesion(ServiceName); objSpace.CommitChanges( ); var comprobante = ( Comprobante )View.CurrentObject; //if ( comprobante.AutorizadaResultado == "A" ) // throw new Exception( "Comprobante ya autorizado" ); CodigoDescripcionType[] arrayObservaciones; CodigoDescripcionType[] arrayErrores; CodigoDescripcionType evento; var consultaComprobanteRequest = new ConsultaComprobanteRequestType( ) { codigoTipoComprobante = Convert.ToInt16(((ComprobanteTipo)comprobante.Tipo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)).Codigo), numeroPuntoVenta = ( short )comprobante.Sector, numeroComprobante = comprobante.Numero }; var resp = service.consultarComprobante(GetAuth(sesionWsmtxca), consultaComprobanteRequest, out arrayObservaciones, out arrayErrores, out evento); if (arrayErrores != null && arrayErrores.Length > 0) { var err = arrayErrores.Aggregate("", (current, error) => current + (error.codigo + " - " + error.descripcion + "\n")); //TODO errores de Encoding. No encontre otra manera de arreglarlo err = err.Replace("ó", "ó").Replace("ú", "ú"); comprobante.AutorizadaNotas = err; throw new Exception("Error en la operación:\n" + err); } if (resp == null) { throw new Exception("Error en la operación:\nNo se obtuvieron datos para la consulta"); } //comprobante.AutorizadaResultado = resp.; comprobante.AutorizadaNotas = ""; if (arrayObservaciones != null && arrayObservaciones.Length > 0) { var obs = arrayObservaciones.Aggregate("", (current, observacion) => current + (observacion.codigo + " - " + observacion.descripcion + "\n")); comprobante.AutorizadaNotas += obs; } comprobante.AutorizadaCodigo = resp.codigoAutorizacion.ToString( ); comprobante.AutorizadaCodigoFecVto = resp.fechaVencimiento; }
private void ComprobanteExportAndMailReportAction_Execute(object sender, SingleChoiceActionExecuteEventArgs e) { if (e.SelectedObjects.Count == 0) { return; } var rutaBase = RutaExpComprobantes; if (string.IsNullOrEmpty(rutaBase)) { throw new UserFriendlyException("No está definida la ruta para exportación de comprobantes"); } var cuentaEmail = Identificadores.GetInstance(ObjectSpace).CuentaEmailFacturacion; if (cuentaEmail == null) { throw new UserFriendlyException("No está definida la cuenta de mail para el envío de comprobantes"); } var plantillaMensaje = Identificadores.GetInstance(ObjectSpace).PlantillaMensajeFacturacion; var plantillaContenido = plantillaMensaje != null ? plantillaMensaje.Contenido : ""; foreach (Comprobante obj in e.SelectedObjects) { var criteria = (CriteriaOperator) new BinaryOperator(View.ObjectTypeInfo.KeyMember.Name, ObjectSpace.GetKeyValue(obj)); var reportData = ObjectSpace.GetObject(( IReportData )e.SelectedChoiceActionItem.Data); var rep = ( XafReport )reportData.LoadReport(ObjectSpace); rep.SetFilteringObject(new LocalizedCriteriaWrapper(View.ObjectTypeInfo.Type, criteria)); var ruta = expandFilename(obj, rutaBase); var fileName = Path.GetFileName(ruta); var ms = new MemoryStream( ); rep.ExportToPdf(ms); var mail = new MailMessage( ); mail.Attachments.Add(new Attachment(ms, fileName, "application/pdf")); var cliente = ObjectSpace.FindObject <Cliente>(new BinaryOperator("Persona.Oid", obj.Destinatario.Oid)); if (cliente == null) { return; } var destinatario = cliente.EmailEnvioFacturacion; if (destinatario == null) { continue; } mail.From = new MailAddress(cuentaEmail.DireccionEmail, cuentaEmail.NombreMostrar); mail.To.Add(new MailAddress(destinatario.Valor, cliente.Persona.Nombre)); mail.CC.Add(new MailAddress("*****@*****.**", "Info (Facturacion)")); mail.Subject = fileName; mail.Body = plantillaContenido; mail.IsBodyHtml = true; cuentaEmail.SendMail(mail); } }
private void ComprobanteController_ComprobanteAutorizando(object sender, ComprobanteAutorizandoArgs args) { var comprobante = (Comprobante)args.Comprobante; if (!Convert.ToBoolean(comprobante.Talonario.GetMemberValue(AFIPModule.PropertyNameFacturaElectronicaWsfeV1))) { return; } //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB var objSpace = Application.CreateObjectSpace( ); var identificadores = Identificadores.GetInstance(objSpace); if (identificadores.FacturaElectronicaEnte == null) { throw new Exception("Ente de factura electrónica no definida para esta empresa"); } var sesionWsfe = identificadores.FacturaElectronicaEnte.GetSesion(Sesion.ServicioWSFE); objSpace.CommitChanges( ); if (comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada) { throw new Exception("Comprobante ya autorizado por la AFIP"); } var resp = ObtenerAutorizacion(sesionWsfe, GetDetRequest(comprobante)); comprobante.AutorizadaNotas = ""; if (resp.Errors != null && resp.Errors.Count > 0) { var err = resp.Errors.Aggregate("", (current, error) => current + (error.Code + " - " + error.Msg + "\n")); //TODO errores de Encoding. No encontre otra manera de arreglarlo err = err.Replace("ó", "ó").Replace("ú", "ú"); comprobante.AutorizadaNotas = err; throw new Exception("Error de autorización:\n" + err); } if (resp.FeCabResp == null || resp.FeDetResp == null) { throw new Exception("Error de autorización:\nNo se obtuvieron datos"); } comprobante.AutorizadaResultado = resp.FeCabResp.Resultado; if (resp.FeDetResp.Count == 1) { if (resp.FeDetResp[0].Observaciones != null && resp.FeDetResp[0].Observaciones.Count > 0) { var obs = resp.FeDetResp[0].Observaciones.Aggregate("", (current, observacion) => current + (observacion.Code + " - " + observacion.Msg + "\n")); comprobante.AutorizadaNotas += obs; } comprobante.AutorizadaCodigo = resp.FeDetResp[0].CAE; if (!string.IsNullOrWhiteSpace(resp.FeDetResp[0].CAEFchVto)) { comprobante.AutorizadaCodigoFecVto = new DateTime(Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(0, 4)), Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(4, 2)), Convert.ToInt32(resp.FeDetResp[0].CAEFchVto.Substring(6, 2))); } } args.Autorizado = comprobante.AutorizadaResultado == ResultadoAutorizacion.Autorizada; }
private void ObtenerCotizacionActionExecute(object sender, SimpleActionExecuteEventArgs e) { //cargar identificadores y sesión de la AFIP. Si no hay una válida, se inicia una nueva sesión y se guardan los cambios en la DB var objSpace = ( XPObjectSpace )Application.CreateObjectSpace( ); var identificadores = Identificadores.GetInstance(objSpace); if (identificadores.FacturaElectronicaEnte == null) { throw new Exception("Ente de factura electrónica no definida para esta empresa"); } var sesionWsmtxca = identificadores.FacturaElectronicaEnte.GetSesion(ServiceName); objSpace.CommitChanges( ); var especie = ( Especie )View.CurrentObject; CodigoDescripcionType[] arrayObservaciones; CodigoDescripcionType[] arrayErrores; CodigoDescripcionType evento; if (especie.Moneda == null) { throw new UserFriendlyException("La especie actual no tiene moneda asignada."); } var monedaAfip = especie.Moneda.GetMemberValue(AFIPModule.PropertyNameCodigoAfip) as AFIP.Moneda; if (monedaAfip == null) { throw new UserFriendlyException("La moneda asociada no tiene equivalencia con la AFIP."); } var especiePredeterminada = Fondos.Identificadores.GetInstance(objSpace).EspeciePredeterminada; if (especiePredeterminada == null) { throw new UserFriendlyException("No hay especie predeterminada definida en el sistema."); } var cotiz = service.consultarCotizacionMoneda(GetAuth(sesionWsmtxca), monedaAfip.Codigo, out arrayErrores, out evento); if (arrayErrores != null && arrayErrores.Length > 0) { var err = arrayErrores.Aggregate("", (current, error) => current + (error.codigo + " - " + error.descripcion + "\n")); //TODO errores de Encoding. No encontre otra manera de arreglarlo err = err.Replace("ó", "ó").Replace("ú", "ú"); throw new Exception("Error en la operación:\n" + err); } var ec = objSpace.CreateObject <EspecieCotizacion>( ); ec.EspecieOrigen = objSpace.GetObject(especie); ec.EspecieDestino = especiePredeterminada; ec.Vendedor = cotiz; ec.Fecha = DateTime.Today; ec.Save( ); objSpace.CommitChanges( ); View.Refresh( ); }
private void SincronizarContactosActionExecute(object sender, SimpleActionExecuteEventArgs e) { var config = Identificadores.GetInstance(ObjectSpace); if (config.CuentaSincContactos == null) { throw new UserFriendlyException("No se configuró la cuenta de Exchange a utilizar para sincronizar contactos."); } if (config.IdentificacionTipoEmail == null) { throw new UserFriendlyException("No se configuró el tipo de identif. para emails, para sincronizar contactos."); } if (config.IdentificacionTipoTelOtro == null) { throw new UserFriendlyException("No se configuró el tipo de identif. para 'otros teléfonos', para sincronizar contactos."); } var service = config.CuentaSincContactos.ExchangeService; var objectSpace = Application.CreateObjectSpace( ); var paresDirecciones = new List <ParPersonaDireccionDireccion>( ); // Get the number of items in the Contacts folder. To keep the response smaller, request only the TotalCount property. var contactsfolder = ContactsFolder.Bind(service, WellKnownFolderName.Contacts); // Instantiate the item view with the number of items to retrieve from the Contacts folder. FindItemsResults <Item> findResults; var view = new ItemView(EWSModule.NumContactosPorLote, 0, OffsetBasePoint.Beginning); var propSet = new PropertySet(BasePropertySet.FirstClassProperties, ContactSchema.HasPicture, ContactSchema.Birthday, ContactSchema.Notes, ContactSchema.WeddingAnniversary, ContactSchema.PhysicalAddresses, ContactSchema.ImAddresses, ContactSchema.PhoneNumbers, ContactSchema.EmailAddresses, ContactSchema.CompleteName, ContactSchema.Attachments); do { // Retrieve the items in the Contacts folder that have the properties you've selected. findResults = contactsfolder.FindItems(view); service.LoadPropertiesForItems(findResults, propSet); processItems(findResults, objectSpace, config, paresDirecciones); if (findResults.NextPageOffset.HasValue) { view.Offset = findResults.NextPageOffset.Value; } } while(findResults.MoreAvailable); objectSpace.CommitChanges( ); objectSpace.Dispose( ); if (!paresDirecciones.IsEmpty( )) { var auxObjectSpace = Application.CreateObjectSpace( ); foreach (var par in paresDirecciones) { var persDir = auxObjectSpace.GetObjectByKey <PersonaDireccion>(par.PersonaDireccion.Oid); persDir.Direccion = auxObjectSpace.GetObjectByKey <Direccion>(par.Direccion.Oid); persDir.Save( ); } auxObjectSpace.CommitChanges( ); } ObjectSpace.Refresh( ); }
private void SincronizarEmailsActionExecute(object sender, SimpleActionExecuteEventArgs e) { var config = Identificadores.GetInstance(ObjectSpace); if (config.CuentaSincEmails == null) { throw new UserFriendlyException("No se configuró la cuenta de Exchange a utilizar para sincronizar emails."); } if (config.ActividadTipoEmail == null) { throw new UserFriendlyException("No se configuró el tipo de actividad CRM para sincronizar emails."); } if (config.ActividadEstadoEmailPendiente == null) { throw new UserFriendlyException("No se configuró el estado de actividad CRM para los emails con marca de pendiente."); } if (config.ActividadEstadoEmailCompletado == null) { throw new UserFriendlyException("No se configuró el estado de actividad CRM para los emails con marca de completado."); } var service = config.CuentaSincEmails.ExchangeService; var objectSpace = Application.CreateObjectSpace( ); var clientes = objectSpace.GetObjects(typeof(Cliente)); var patrones = (from Cliente cliente in clientes where !string.IsNullOrEmpty(cliente.PatronEmailEntrante) select new ClientePatron { Cliente = cliente, Patron = new Regex(cliente.PatronEmailEntrante) }).ToList( ); var results = service.FindItems(WellKnownFolderName.Inbox, "", new ItemView(2000)); service.LoadPropertiesForItems(results, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.NormalizedBody, ItemSchema.Attachments)); foreach (var email in results.OfType <EmailMessage>( ).Select(item => item)) { var actividad = objectSpace.FindObject <Actividad>(new BinaryOperator(EWSModule.PropertyCodigoEWS, email.Id.UniqueId)) ?? objectSpace.CreateObject <Actividad>( ); var modifEWS = ( DateTime? )actividad.GetMemberValue(EWSModule.PropertyModifFechaEWS); if (modifEWS.HasValue && modifEWS.Value == email.LastModifiedTime) { continue; } actividad.SetMemberValue(EWSModule.PropertyCodigoEWS, email.Id.UniqueId); actividad.SetMemberValue(EWSModule.PropertyModifFechaEWS, email.LastModifiedTime); actividad.Grupo = CoreAppLogonParameters.Instance.GrupoActual(actividad.Session); actividad.Tipo = objectSpace.GetObjectByKey <ActividadTipo>(config.ActividadTipoEmail.Oid); actividad.Asunto = email.Subject; actividad.Contenido = email.NormalizedBody.Text; if (email.Flag != null) { if (email.Flag.FlagStatus == ItemFlagStatus.Flagged) { actividad.Estado = objectSpace.GetObjectByKey <ActividadEstado>(config.ActividadEstadoEmailPendiente.Oid); } else if (email.Flag != null && email.Flag.FlagStatus == ItemFlagStatus.Complete) { actividad.Estado = objectSpace.GetObjectByKey <ActividadEstado>(config.ActividadEstadoEmailCompletado.Oid); } } actividad.DireccionRemitente = email.From.Address; actividad.DireccionDestinatario = email.ToRecipients.Aggregate("", (current, dir) => current + (dir.Address + ";")); if (actividad.DireccionDestinatario.Length > 0) { actividad.DireccionDestinatario = actividad.DireccionDestinatario.Remove(actividad.DireccionDestinatario.Length - 1); } actividad.DireccionCC = email.CcRecipients.Aggregate("", (current, dir) => current + (dir.Address + ";")); if (actividad.DireccionCC.Length > 0) { actividad.DireccionCC = actividad.DireccionCC.Remove(actividad.DireccionCC.Length - 1); } actividad.DireccionBCC = email.BccRecipients.Aggregate("", (current, dir) => current + (dir.Address + ";")); if (actividad.DireccionBCC.Length > 0) { actividad.DireccionBCC = actividad.DireccionBCC.Remove(actividad.DireccionBCC.Length - 1); } actividad.Inicio = actividad.Fin = email.DateTimeReceived; foreach (var patron in patrones.Where(patron => patron.Patron.IsMatch(email.From.Address))) { actividad.Cliente = patron.Cliente; break; } actividad.Save( ); } objectSpace.CommitChanges( ); ObjectSpace.Refresh( ); }