public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
     if (value != null)
     {
         string imagename = value as string;
         return(Conversores.STRtoIMG(imagename));
     }
     return(null);
 }
        public static bool VincularVeiculo(ClasseVeiculosCredenciais.VeiculoCredencial veiculoCredencial)

        {
            try
            {
                //IEngine _sdk = Main.engine;
                Cardholder _cardholder;
                string     _firstname = "";
                string     _lastname  = "";
                ////// CardHolder
                try
                {
                    _sdk.TransactionManager.CreateTransaction();

                    _cardholder = BuscarCardHolder(veiculoCredencial.Placa, veiculoCredencial.CNPJ);

                    string[] _nomeCompleto = veiculoCredencial.VeiculoNome.Split(' ');

                    int _len = _nomeCompleto.Count();

                    if (_len > 1)
                    {
                        _lastname = _nomeCompleto[_len - 1];

                        _firstname = _nomeCompleto[0];
                    }
                    else
                    {
                        _firstname = veiculoCredencial.VeiculoNome;
                    }

                    //DateTime _DataValidade;

                    //if (vinculo.Validade != null)
                    //{
                    //    _DataValidade = (DateTime)vinculo.Validade;

                    //    _DataValidade = _DataValidade.AddSeconds(86399);

                    //    _DataValidade = _DataValidade <= DateTime.Now ? DateTime.Now.AddSeconds(3) : _DataValidade;
                    //}
                    //else
                    //{
                    //    _DataValidade = DateTime.Now.AddSeconds(86399);
                    //}


                    CardholderGroup _cardholderGroup = _sdk.GetEntity(EntityType.CardholderGroup, 1) as CardholderGroup;

                    if (_cardholder == null)
                    {
                        _cardholder = _sdk.CreateEntity(veiculoCredencial.VeiculoNome, EntityType.Cardholder) as Cardholder;
                    }

                    BitmapImage _img = Conversores.STRtoIMG(veiculoCredencial.VeiculoFoto) as BitmapImage;

                    Bitmap _Foto = Conversores.BitmapImageToBitmap(_img);


                    if (_Foto != null)
                    {
                        _cardholder.Picture = _Foto;
                    }

                    Bitmap _Motorista = null;


                    _cardholder.SetCustomFieldAsync("No. do Veiculo", veiculoCredencial.VeiculoID);

                    _cardholder.SetCustomFieldAsync("CPF", veiculoCredencial.Placa);

                    _cardholder.SetCustomFieldAsync("Motorista", _img);

                    _cardholder.SetCustomFieldAsync("Empresa", veiculoCredencial.EmpresaNome);

                    _cardholder.SetCustomFieldAsync("Nome Fantasia", veiculoCredencial.EmpresaApelido);

                    _cardholder.SetCustomFieldAsync("CNPJ", veiculoCredencial.CNPJ);

                    _cardholder.SetCustomFieldAsync("Cargo", veiculoCredencial.Cargo);

                    _cardholder.InsertIntoPartition(Partition.DefaultPartitionGuid);

                    if (_cardholder.Groups.Count == 0 && _cardholderGroup != null)
                    {
                        _cardholder.Groups.Add(_cardholderGroup.Guid);
                    }


                    _cardholder.FirstName = _firstname;

                    _cardholder.LastName = _lastname;


                    //_cardholder.ActivationMode = new SpecificActivationPeriod(DateTime.Now, _DataValidade);

                    _sdk.TransactionManager.CommitTransaction();

                    veiculoCredencial.CardHolderGuid = _cardholder.Guid;
                }
                catch (Exception ex)
                {
                    return(false);
                }



                //// Credencial
                ///
                if (veiculoCredencial.FormatIDGUID != "00000000-0000-0000-0000-000000000000" && veiculoCredencial.NumeroCredencial != "")
                {
                    try
                    {
                        DateTime _DataValidade;

                        if (veiculoCredencial.Validade != null)
                        {
                            _DataValidade = (DateTime)veiculoCredencial.Validade;

                            _DataValidade = _DataValidade.AddSeconds(86399);

                            _DataValidade = _DataValidade <= DateTime.Now ? DateTime.Now.AddSeconds(3) : _DataValidade;
                        }
                        else
                        {
                            _DataValidade = DateTime.Now.AddSeconds(86399);
                        }

                        Credential _credencial; // = _sdk.GetEntity((Guid)veiculoCredencial.CredencialGuid) as Credential;

                        _credencial = BuscarCredencial(veiculoCredencial.NumeroCredencial, veiculoCredencial.FormatIDGUID, veiculoCredencial.FC);


                        if (_credencial != null)
                        {
                            if (_credencial.CardholderGuid != _cardholder.Guid)
                            {
                                //MessageBox.Show("Esta credencial pertence a outro usuário e não pode ser vinculada!", "Erro ao Vincular", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                                Global.PopupBox("Esta credencial já está associada a um usuário e não pode ser vinculada!", 4);

                                return(false);
                            }
                            else // atualizar credencial
                            {
                                if (veiculoCredencial.LayoutCrachaGUID != "")
                                {
                                    BadgeTemplate _BadgeTemplate = _sdk.GetEntity(new Guid(veiculoCredencial.LayoutCrachaGUID)) as BadgeTemplate;
                                    _credencial.BadgeTemplate = _BadgeTemplate.Guid;

                                    _credencial.ActivationMode = new SpecificActivationPeriod(DateTime.Now, _DataValidade);
                                }
                            }
                        }
                        else //criar nova credencial
                        {
                            _sdk.TransactionManager.CreateTransaction();

                            _credencial = _sdk.CreateEntity("Credencial de " + _firstname, EntityType.Credential) as Credential;

                            _credencial.Name = veiculoCredencial.NumeroCredencial + " - " + _firstname + " " + _lastname;

                            _credencial.ActivationMode = new SpecificActivationPeriod(DateTime.Now, _DataValidade);

                            if (veiculoCredencial.LayoutCrachaGUID != "")
                            {
                                BadgeTemplate _BadgeTemplate = _sdk.GetEntity(new Guid(veiculoCredencial.LayoutCrachaGUID)) as BadgeTemplate;
                                _credencial.BadgeTemplate = _BadgeTemplate.Guid;
                            }

                            //0	N/D                             00000000-0000-0000-0000-000000000000
                            //1	Standard - 26 bits              00000000-0000-0000-0000-000000000200
                            //2	H10302 - 37 bits                00000000-0000-0000-0000-000000000400
                            //3	H10304 - 37 bits                00000000-0000-0000-0000-000000000500
                            //4	H10306 - 34 bits                00000000-0000-0000-0000-000000000300
                            //5	HID Corporate 1000 - 35 bits    00000000-0000-0000-0000-000000000600
                            //6	HID Corporate 1000 - 48 bits    00000000-0000-0000-0000-000000000800
                            //7	CSN                             00000000-0000-0000-0000-000000000700


                            switch (veiculoCredencial.FormatIDGUID)
                            {
                            case "00000000-0000-0000-0000-000000000200":
                                _credencial.Format = new WiegandStandardCredentialFormat(Convert.ToInt32(veiculoCredencial.FC), Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000400":
                                _credencial.Format = new WiegandH10302CredentialFormat(Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000500":
                                _credencial.Format = new WiegandH10304CredentialFormat(Convert.ToInt32(veiculoCredencial.FC), Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000300":
                                _credencial.Format = new WiegandH10306CredentialFormat(Convert.ToInt32(veiculoCredencial.FC), Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000600":
                                _credencial.Format = new WiegandCorporate1000CredentialFormat(Convert.ToInt32(veiculoCredencial.FC), Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000800":
                                _credencial.Format = new Wiegand48BitCorporate1000CredentialFormat(Convert.ToInt32(veiculoCredencial.FC), Convert.ToInt32(veiculoCredencial.NumeroCredencial));
                                break;

                            case "00000000-0000-0000-0000-000000000700":
                                CustomCredentialFormat mifareCSN;

                                SystemConfiguration sysConfig = _sdk.GetEntity(SdkGuids.SystemConfiguration) as SystemConfiguration;

                                if (sysConfig != null)
                                {
                                    foreach (CredentialFormat cardFormat in sysConfig.CredentialFormats)
                                    {
                                        if (cardFormat.Name == "CSN")
                                        {
                                            mifareCSN = cardFormat as CustomCredentialFormat;
                                            mifareCSN.SetValues(long.Parse(veiculoCredencial.NumeroCredencial));
                                            _credencial.Format = mifareCSN;
                                            break;
                                        }
                                        //
                                    }
                                }
                                break;
                            }

                            //if (_credencial.Format != null)
                            //{


                            _credencial.InsertIntoPartition(Partition.DefaultPartitionGuid);

                            _cardholder.Credentials.Add(_credencial);
                            //}


                            _sdk.TransactionManager.CommitTransaction();
                        }

                        veiculoCredencial.CredencialGuid = _credencial.Guid;
                    }
                    catch (Exception ex)
                    {
                        return(false);
                    }
                }

                return(true);
            }

            catch (Exception ex)
            {
                return(false);
            }
        }
        public static bool Vincular(ClasseColaboradoresCredenciais.ColaboradorCredencial colaboradorCredencial)

        {
            try
            {
                //IEngine _sdk = Main.engine;
                Cardholder _cardholder = null;
                string     _firstname  = "";
                string     _lastname   = "";
                ////// CardHolder
                try
                {
                    _cardholder = BuscarCardHolder(colaboradorCredencial.CPF, colaboradorCredencial.CNPJ);
                    _sdk.TransactionManager.CreateTransaction();



                    string[] _nomeCompleto = colaboradorCredencial.ColaboradorNome.Split(' ');

                    int _len = _nomeCompleto.Count();

                    if (_len > 1)
                    {
                        _lastname = _nomeCompleto[_len - 1];

                        _firstname = _nomeCompleto[0];
                    }
                    else
                    {
                        _firstname = colaboradorCredencial.ColaboradorNome;
                    }


                    CardholderGroup _cardholderGroup = _sdk.GetEntity(EntityType.CardholderGroup, 1) as CardholderGroup;

                    if (_cardholder == null)
                    {
                        _cardholder = _sdk.CreateEntity(colaboradorCredencial.ColaboradorNome, EntityType.Cardholder) as Cardholder;
                    }

                    BitmapImage _img1 = Conversores.STRtoIMG(colaboradorCredencial.ColaboradorFoto) as BitmapImage;

                    BitmapImage _img2 = Conversores.STRtoIMG(colaboradorCredencial.EmpresaLogo) as BitmapImage;

                    Bitmap _Foto = Conversores.BitmapImageToBitmap(_img1);

                    if (_Foto != null)
                    {
                        _cardholder.Picture = _Foto;
                    }

                    //////   CUSTOM FIELDS //////

                    //var _systemConfiguration = _sdk.GetEntity(SdkGuids.SystemConfiguration) as SystemConfiguration;

                    //var _customFieldService = _systemConfiguration.CustomFieldService;

                    //Bitmap _Logo = Conversores.BitmapImageToBitmap(_img2);

                    //System.Drawing.Image _img3 = System.Drawing.Image.FromFile("D:\\Meus Documentos\\Visual Studio 2015\\Projects\\Genetec\\Projeto Credenciamento\\iModSCCredenciamento 1.0.0.3\\iModSCCredenciamento\\Resources\\Contrato.jpg");

                    //var _customField = _customFieldService.CustomFields.Where(x => x.EntityType == EntityType.Cardholder && x.Name.Equals("Logo")).FirstOrDefault();

                    //if (_customField != null)
                    //{
                    //    _customFieldService.SetValue(_customField, _cardholder.Guid, _img3);
                    //}


                    Bitmap _Logo = Conversores.BitmapImageToBitmap(_img2);

                    if (_Logo != null)
                    {
                        _cardholder.SetCustomFieldAsync("Logo", _Logo);
                    }

                    Bitmap _Motorista = null;

                    if (colaboradorCredencial.Motorista)
                    {
                        _img1      = new BitmapImage(new Uri("pack://application:,,,/iModSCCredenciamento;component/Resources/Veiculo.png", UriKind.Absolute));
                        _Motorista = Conversores.BitmapImageToBitmap(_img1);
                        _cardholder.SetCustomFieldAsync("Motorista", _Motorista);
                    }

                    _cardholder.SetCustomFieldAsync("Colaborador (ID)", colaboradorCredencial.ColaboradorID);

                    _cardholder.SetCustomFieldAsync("Apelido", colaboradorCredencial.ColaboradorApelido.Trim());

                    _cardholder.SetCustomFieldAsync("CPF", colaboradorCredencial.CPF.Trim());

                    _cardholder.SetCustomFieldAsync("Empresa", colaboradorCredencial.EmpresaNome.Trim());

                    _cardholder.SetCustomFieldAsync("Nome Fantasia", colaboradorCredencial.EmpresaApelido.Trim());

                    _cardholder.SetCustomFieldAsync("CNPJ", colaboradorCredencial.CNPJ.Trim());

                    _cardholder.SetCustomFieldAsync("Cargo", colaboradorCredencial.Cargo.Trim());



                    _cardholder.InsertIntoPartition(Partition.DefaultPartitionGuid);

                    if (_cardholder.Groups.Count == 0 && _cardholderGroup != null)
                    {
                        _cardholder.Groups.Add(_cardholderGroup.Guid);
                    }


                    _cardholder.FirstName = _firstname.Trim();

                    _cardholder.LastName = _lastname.Trim();

                    _sdk.TransactionManager.CommitTransaction();

                    colaboradorCredencial.CardHolderGuid = _cardholder.Guid;
                }
                catch (Exception ex)
                {
                    if (_sdk.TransactionManager.IsTransactionActive)
                    {
                        _sdk.TransactionManager.RollbackTransaction();
                    }

                    return(false);
                }



                //// Credencial
                ///
                if (colaboradorCredencial.FormatIDGUID != "00000000-0000-0000-0000-000000000000" && colaboradorCredencial.NumeroCredencial != "")
                {
                    try
                    {
                        DateTime _DataValidade;

                        if (colaboradorCredencial.Validade != null)
                        {
                            _DataValidade = (DateTime)colaboradorCredencial.Validade;

                            _DataValidade = _DataValidade.AddSeconds(86399);

                            _DataValidade = _DataValidade <= DateTime.Now ? DateTime.Now.AddSeconds(3) : _DataValidade;
                        }
                        else
                        {
                            _DataValidade = DateTime.Now.AddSeconds(86399);
                        }

                        Credential _credencial; // = _sdk.GetEntity((Guid)colaboradorCredencial.CredencialGuid) as Credential;

                        _credencial = BuscarCredencial(colaboradorCredencial.NumeroCredencial, colaboradorCredencial.FormatIDGUID, colaboradorCredencial.FC);


                        if (_credencial != null)
                        {
                            if (_credencial.CardholderGuid != _cardholder.Guid)
                            {
                                //MessageBox.Show("Esta credencial pertence a outro usuário e não pode ser vinculada!", "Erro ao Vincular", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                                Global.PopupBox("Esta credencial já está associada a um usuário e não pode ser vinculada!", 4);

                                return(false);
                            }
                            else // atualizar credencial
                            {
                                if (colaboradorCredencial.LayoutCrachaGUID != "")
                                {
                                    //BadgeTemplate _BadgeTemplate = _sdk.GetEntity(new Guid(colaboradorCredencial.LayoutCrachaGUID)) as BadgeTemplate;
                                    //_credencial.BadgeTemplate = _BadgeTemplate.Guid;

                                    _credencial.ActivationMode = new SpecificActivationPeriod(DateTime.Now, _DataValidade);

                                    _credencial.SetCustomFieldAsync("Privilégio #1", colaboradorCredencial.PrivilegioDescricao1);

                                    _credencial.SetCustomFieldAsync("Privilégio #2", colaboradorCredencial.PrivilegioDescricao2);
                                }
                            }
                        }
                        else //criar nova credencial
                        {
                            _sdk.TransactionManager.CreateTransaction();

                            _credencial = _sdk.CreateEntity("Credencial de " + _firstname, EntityType.Credential) as Credential;

                            _credencial.Name = colaboradorCredencial.NumeroCredencial.Trim() + " - " + _firstname + " " + _lastname;

                            _credencial.ActivationMode = new SpecificActivationPeriod(DateTime.Now, _DataValidade);


                            if (!colaboradorCredencial.Ativa)
                            {
                                _credencial.State = CredentialState.Inactive;
                            }


                            //_credencial.SetCustomFieldAsync("Privilégio", colaboradorCredencial.PrivilegioDescricao1);

                            if (colaboradorCredencial.LayoutCrachaGUID != "")
                            {
                                //BadgeTemplate _BadgeTemplate = _sdk.GetEntity(new Guid(colaboradorCredencial.LayoutCrachaGUID)) as BadgeTemplate;
                                //_credencial.BadgeTemplate = _BadgeTemplate.Guid;
                            }

                            //0	N/D                             00000000-0000-0000-0000-000000000000
                            //1	Standard - 26 bits              00000000-0000-0000-0000-000000000200
                            //2	H10302 - 37 bits                00000000-0000-0000-0000-000000000400
                            //3	H10304 - 37 bits                00000000-0000-0000-0000-000000000500
                            //4	H10306 - 34 bits                00000000-0000-0000-0000-000000000300
                            //5	HID Corporate 1000 - 35 bits    00000000-0000-0000-0000-000000000600
                            //6	HID Corporate 1000 - 48 bits    00000000-0000-0000-0000-000000000800
                            //7	CSN                             00000000-0000-0000-0000-000000000700


                            switch (colaboradorCredencial.FormatIDGUID)
                            {
                            case "00000000-0000-0000-0000-000000000200":
                                _credencial.Format = new WiegandStandardCredentialFormat(Convert.ToInt32(colaboradorCredencial.FC), Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000400":
                                _credencial.Format = new WiegandH10302CredentialFormat(Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000500":
                                _credencial.Format = new WiegandH10304CredentialFormat(Convert.ToInt32(colaboradorCredencial.FC), Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000300":
                                _credencial.Format = new WiegandH10306CredentialFormat(Convert.ToInt32(colaboradorCredencial.FC), Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000600":
                                _credencial.Format = new WiegandCorporate1000CredentialFormat(Convert.ToInt32(colaboradorCredencial.FC), Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000800":
                                _credencial.Format = new Wiegand48BitCorporate1000CredentialFormat(Convert.ToInt32(colaboradorCredencial.FC), Convert.ToInt32(colaboradorCredencial.NumeroCredencial.Trim()));
                                break;

                            case "00000000-0000-0000-0000-000000000700":
                                long _cardnumber = long.Parse(colaboradorCredencial.NumeroCredencial.Trim());
                                _credencial.Format = new WiegandCsn32CredentialFormat(_cardnumber);
                                break;
                            }

                            //if (_credencial.Format != null)
                            //{


                            _credencial.InsertIntoPartition(Partition.DefaultPartitionGuid);

                            _cardholder.Credentials.Add(_credencial);
                            //}


                            _sdk.TransactionManager.CommitTransaction();
                        }

                        colaboradorCredencial.CredencialGuid = _credencial.Guid;
                    }
                    catch (Exception ex)
                    {
                        if (_sdk.TransactionManager.IsTransactionActive)
                        {
                            _sdk.TransactionManager.RollbackTransaction();
                        }
                        return(false);
                    }
                }

                return(true);
            }

            catch (Exception ex)
            {
                return(false);
            }
        }