예제 #1
0
        // metodo que reconhece o nao terminal identificadores
        private bool identificadores(ref Identificadores idents)
        {
            int             guarda  = index;
            Identificador_r ident_r = new Identificador_r();

            ident_r.ident1 = new Identificador();

            if (identificador(ref ident_r.ident1))
            {
                if (identificador_r(ref ident_r.ident2))
                {
                    idents = ident_r;
                    return(true);
                }
            }

            index = guarda;

            Identificador ident = new Identificador();

            if (identificador(ref ident))
            {
                idents = ident;
                return(true);
            }

            return(false);
        }
        public static int Insert(Identificadores ide)
        {
            int retorno = 0;

            try {
                IDbConnection objConexao; // Abre a conexao
                IDbCommand    objCommand; // Cria o comando
                string        sql = "INSERT INTO identificadores(ide_estado, ide_identificador, usu_codigo, tid_codigo) " +
                                    "VALUES(?ide_estado, ?ide_identificador, ?usu_codigo, ?tid_codigo)";
                objConexao = Mapped.Connection();
                objCommand = Mapped.Command(sql, objConexao);
                objCommand.Parameters.Add(Mapped.Parameter("?ide_estado", ide.Ide_estado));
                objCommand.Parameters.Add(Mapped.Parameter("?ide_identificador", ide.Ide_identificador));
                //Fk
                objCommand.Parameters.Add(Mapped.Parameter("?usu_codigo", ide.Usu_codigo.Usu_codigo));
                objCommand.Parameters.Add(Mapped.Parameter("?tid_codigo", ide.Tid_codigo.Tid_codigo));
                objCommand.ExecuteNonQuery(); // utilizado quando cdigo não tem retorno, como seria o caso do SELECT
                objConexao.Close();
                objCommand.Dispose();
                objConexao.Dispose();
            } catch (Exception e) {
                retorno = -2;
            }
            return(retorno);
        }
        /// <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"));
            }
        }
        // POST: api/Endereco
        public IHttpActionResult Identificadores([FromBody] Identificadores identificadores)
        {
            if (autenticar.autenticacao(Request, 3) == null)
            {
                return(Content(HttpStatusCode.Unauthorized, "Credenciais Invalidas ou Ausentes!"));
            }

            Identificadores ide = new Identificadores();

            ide.Ide_estado        = identificadores.Ide_estado;
            ide.Ide_identificador = identificadores.Ide_identificador;
            ide.Usu_codigo        = identificadores.Usu_codigo;
            ide.Tid_codigo        = identificadores.Tid_codigo;

            int retorno = IdentificadoresDB.Insert(ide);

            if (retorno == -2)
            {
                return(BadRequest());
            }
            else
            {
                return(Ok());
            }
        }
        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)));
            }
        }
예제 #6
0
        public override void AfterConstruction()
        {
            base.AfterConstruction();

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

            Especie = Identificadores.GetInstance(Session).EspeciePredeterminada;

            Fecha              = DateTime.Today;
            CantidadCuotas     = 1;
            Cambio             = 1;
            ConceptosIncluidos = ConceptosIncluidos.Productos;
        }
예제 #8
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 );
        }
예제 #9
0
        private static void SyncTelefono(PhoneNumberKey phoneNumberKey,
                                         IdentificacionTipo identificacionTipo,
                                         Contact contact,
                                         Persona persona, IObjectSpace objectSpace, Identificadores config)
        {
            if (identificacionTipo == null)
            {
                identificacionTipo = config.IdentificacionTipoTelOtro;
            }

            if (contact.PhoneNumbers.Contains(phoneNumberKey))
            {
                var phone = contact.PhoneNumbers[phoneNumberKey];
                SyncIdentificacion(persona, identificacionTipo, objectSpace, phone, phoneNumberKey.ToString( ));
            }
        }
예제 #10
0
        // metodo auxiliar para reconhecer a recursividade dos identificadores
        private bool identificador_r(ref Identificadores idents)
        {
            int guarda = index;

            if (tokens[index].valor.Equals(','))
            {
                index++;

                Identificador_r ident_r = new Identificador_r();
                ident_r.ident1 = new Identificador();

                if (identificador(ref ident_r.ident1))
                {
                    if (identificador_r(ref ident_r.ident2))
                    {
                        idents = ident_r;
                        return(true);
                    }
                }
            }

            index = guarda;

            if (tokens[index].valor.Equals(','))
            {
                index++;

                Identificador ident = new Identificador();

                if (identificador(ref ident))
                {
                    idents = ident;
                    return(true);
                }
            }

            return(false);
        }
        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 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(  );
        }
예제 #14
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( );
        }
예제 #15
0
        private void processItems(IEnumerable <Item> findResults, IObjectSpace objectSpace, Identificadores config, List <ParPersonaDireccionDireccion> paresDirecciones)
        {
            foreach (var item in findResults)
            {
                if (!(item is Contact))
                {
                    continue;
                }

                var contact = item as Contact;

                var persona = objectSpace.FindObject <Persona>(new BinaryOperator(EWSModule.PropertyCodigoEWS, item.Id.UniqueId)) ?? objectSpace.CreateObject <Persona>( );

                var modifEWS = ( DateTime? )persona.GetMemberValue(EWSModule.PropertyModifFechaEWS);
                if (modifEWS.HasValue && modifEWS.Value == item.LastModifiedTime)
                {
                    continue;
                }

                persona.SetMemberValue(EWSModule.PropertyCodigoEWS, item.Id.UniqueId);
                persona.SetMemberValue(EWSModule.PropertyModifFechaEWS, item.LastModifiedTime);

                persona.Grupo = CoreAppLogonParameters.Instance.GrupoActual(persona.Session);

                if (persona.Oid == -1) //Persona nueva
                {
                    persona.Tipo = TipoPersona.Juridica;

                    //si tiene asignado un apellido, o un telefono celular, inducimos que probablemente es una persona fisica
                    if (!string.IsNullOrEmpty(contact.CompleteName.Surname) || contact.PhoneNumbers.Contains(PhoneNumberKey.MobilePhone))
                    {
                        persona.Tipo = TipoPersona.Fisica;
                    }
                }

                persona.Nombre = contact.CompleteName.FullName;

                persona.Tratamiento      = contact.CompleteName.Title;
                persona.NombrePila       = contact.CompleteName.GivenName;
                persona.SegundoNombre    = contact.CompleteName.MiddleName;
                persona.ApellidosPaterno = contact.CompleteName.Surname;
                persona.NombreFantasia   = contact.CompleteName.NickName;
                DateTime?birthday;
                if (contact.TryGetProperty(ContactSchema.Birthday, out birthday))
                {
                    persona.NacimientoFecha = birthday;
                }
                persona.Notas = contact.Notes;
                DateTime?anniversary;
                if (contact.TryGetProperty(ContactSchema.WeddingAnniversary, out anniversary))
                {
                    persona.AniversarioFecha = contact.WeddingAnniversary;
                }

                SyncIdentificacion(persona, config.IdentificacionTipoWebTrabajo, objectSpace, contact.BusinessHomePage, "BusinessHomePage");

                SyncPropiedad(persona, config.PropiedadPuesto, objectSpace, contact.JobTitle, "JobTitle");
                SyncPropiedad(persona, config.PropiedadDepartamento, objectSpace, contact.Department, "Department");
                SyncPropiedad(persona, config.PropiedadAsistente, objectSpace, contact.AssistantName, "AssistantName");
                SyncPropiedad(persona, config.PropiedadProfesion, objectSpace, contact.Profession, "Profession");
                SyncPropiedad(persona, config.PropiedadEsposo, objectSpace, contact.SpouseName, "SpouseName");

                SyncIM(ImAddressKey.ImAddress1, config.IdentificacionTipoIM, contact, persona, objectSpace);
                SyncIM(ImAddressKey.ImAddress2, config.IdentificacionTipoIM, contact, persona, objectSpace);
                SyncIM(ImAddressKey.ImAddress3, config.IdentificacionTipoIM, contact, persona, objectSpace);

                SyncDireccion(PhysicalAddressKey.Home, config.DireccionTipoParticular, contact, persona, objectSpace, paresDirecciones);
                SyncDireccion(PhysicalAddressKey.Business, config.DireccionTipoLaboral, contact, persona, objectSpace, paresDirecciones);
                SyncDireccion(PhysicalAddressKey.Other, config.DireccionTipoOtra, contact, persona, objectSpace, paresDirecciones);

                SyncTelefono(PhoneNumberKey.AssistantPhone, config.IdentificacionTipoTelAsistente, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.BusinessFax, config.IdentificacionTipoTelFaxTrabajo, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.BusinessPhone, config.IdentificacionTipoTelTrabajo, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.BusinessPhone2, config.IdentificacionTipoTelTrabajo, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.Callback, config.IdentificacionTipoTelDevLlamada, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.CarPhone, config.IdentificacionTipoTelAuto, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.CompanyMainPhone, config.IdentificacionTipoTelPpalCia, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.HomeFax, config.IdentificacionTipoFaxParticular, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.HomePhone, config.IdentificacionTipoTelParticular, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.HomePhone2, config.IdentificacionTipoTelParticular, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.Isdn, config.IdentificacionTipoTelISDN, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.MobilePhone, config.IdentificacionTipoTelMovil, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.OtherFax, config.IdentificacionTipoFaxOtro, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.OtherTelephone, config.IdentificacionTipoTelOtro, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.Pager, config.IdentificacionTipoTelPager, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.PrimaryPhone, config.IdentificacionTipoTelPrimario, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.RadioPhone, config.IdentificacionTipoTelRadio, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.Telex, config.IdentificacionTipoTelex, contact, persona, objectSpace, config);
                SyncTelefono(PhoneNumberKey.TtyTddPhone, config.IdentificacionTipoTTY, contact, persona, objectSpace, config);

                SyncEmail(EmailAddressKey.EmailAddress1, config.IdentificacionTipoEmail, contact, persona, objectSpace);
                SyncEmail(EmailAddressKey.EmailAddress2, config.IdentificacionTipoEmail, contact, persona, objectSpace);
                SyncEmail(EmailAddressKey.EmailAddress3, config.IdentificacionTipoEmail, contact, persona, objectSpace);

                //TODO: buscar otro mecanismo para cargar la foto (manual, con un boton on-demand?)
                //es demasiado pesado para que sea automatico

                /*var hasPicture = false;
                 * contact.TryGetProperty( ContactSchema.HasPicture, out hasPicture );
                 *
                 * if ( hasPicture )
                 * {
                 * //contact.Load( new PropertySet( ItemSchema.Attachments ) );
                 * var pictureAttachment = contact.GetContactPictureAttachment( );
                 * if ( pictureAttachment != null )
                 * {
                 *  var ms = new MemoryStream( );
                 *  pictureAttachment.Load( ms );
                 *  p.Imagen = Image.FromStream( ms );
                 * }
                 * }*/

                persona.Save( );

                Thread.Sleep(1);
            }
        }
예제 #16
0
 private void button7_Click(object sender, EventArgs e)
 {
     Identificadores identificadores = new Identificadores();
 }
        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 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 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;
        }
예제 #20
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 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( );
        }