/// <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)));
            }
        }
Example #3
0
        public override void AfterConstruction()
        {
            base.AfterConstruction();

            Tipo = TipoPersona.Fisica;
            if (CoreAppLogonParameters.Instance.EmpresaActual(Session) != null)
            {
                NacimientoPais = Identificadores.GetInstance(Session).PaisPredeterminado;
            }
        }
Example #4
0
        public override void AfterConstruction( )
        {
            base.AfterConstruction( );

            Especie = Identificadores.GetInstance(Session).EspeciePredeterminada;

            Fecha              = DateTime.Today;
            CantidadCuotas     = 1;
            Cambio             = 1;
            ConceptosIncluidos = ConceptosIncluidos.Productos;
        }
Example #5
0
        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 );
        }
Example #6
0
        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(  );
        }
Example #13
0
        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( );
        }