protected void updateAccessTimings(Uri url, Boolean updateOldOnly = false) { if (null != AccessTimes) { AccessTiming lastEntry = 0 == AccessTimes.Count ? null : AccessTimes.Peek(); if (null != lastEntry) { lastEntry.markTiming(); } if (!updateOldOnly) { AccessTimes.Push(new AccessTiming(url)); } } }
async private Task PreparandoDll (bool Imediato = false) { if (!Imediato) { timeOut = 20; while (timeOut-- > 0) await Task.Delay (1000); } Console.WriteLine ("em PreparandoDll.."); timeOut = 0; int p = 0; try { p = 1; if (meuSkey != null) { if (string.IsNullOrEmpty (meuSkey.deviceAddress)) meuSkey.deviceAddress = "00:00:00:00:00:00"; else if (!meuSkey.deviceAddress.Equals ("00:00:00:00:00:00") && !(mysafetyDll.meusBLEs.ContainsKey (meuSkey.deviceAddress))) { mysafetyDll.meusBLEs.Add (meuSkey.deviceAddress, meuSkey); mysafetyDll.setaMeuSkey (meuSkey, false); Console.WriteLine ("em PreparaDll*** " + meuSkey); } else Console.WriteLine ("em PreparaDll.." + meuSkey); } else Console.WriteLine ("em PreparaDll.. skey null?"); DadosAlterados = false; string userId = Settings.user_Id; if (Gates.Count () == 0) { inicializando = false; return; } p = 2; if (!string.IsNullOrEmpty (userId)) { string horariosVerao = String.Format ("{0:ddMM}{1:ddMM}", user.IVerao, user.FVerao); if (horariosVerao.Length == 8) mysafetyDll.horariosVerao = horariosVerao; p = 3; // 0 - Montar uma collection com todos os objetos horário. Dictionary<String, FaixaHorario> horarios = new Dictionary<String, FaixaHorario> (); foreach (var accessTime in HorariosDisponiveis) { string diasSemana = String.Empty; diasSemana += accessTime.Hol ? "F" : "0"; diasSemana += accessTime.Mon ? "S" : "0"; diasSemana += accessTime.Tue ? "T" : "0"; diasSemana += accessTime.Wed ? "Q" : "0"; diasSemana += accessTime.Thu ? "Q" : "0"; diasSemana += accessTime.Fri ? "S" : "0"; diasSemana += accessTime.Sat ? "S" : "0"; diasSemana += accessTime.Sun ? "D" : "0"; FaixaHorario horario = new FaixaHorario (accessTime.Name, accessTime.Start, accessTime.End, diasSemana); horario.descricao = accessTime.Name; horarios.Add (accessTime.Name, horario); } p = 4; // 1 - montar em uma collection todos os objetos perfil disponíveis. Dictionary<String, Perfil> perfis = new Dictionary<String, Perfil> (); AccessTimes ac; int pos; foreach (var accessProfile in Perfis) { int tipoPermissao = 0; if (accessProfile.IsP) tipoPermissao = Perfil.PEDESTRE; if (accessProfile.IsA) tipoPermissao = Perfil.GARAGEM; if (accessProfile.IsA && accessProfile.IsP) tipoPermissao = Perfil.BOTH; Perfil perfil = new Perfil (accessProfile.Name, accessProfile.Expire, tipoPermissao); perfis.Add (accessProfile.Name, perfil); //Coloca o nome dos horarios selecionados dentro do objeto perfil for (int i = 0; i < 8; i++) if (!string.IsNullOrEmpty (accessProfile.AcessTimeId (i))) { ac = new AccessTimes (accessProfile.AcessTimeId (i)); if ((pos = HorariosDisponiveis.IndexOf (ac)) >= 0) { ac = HorariosDisponiveis [pos]; perfil.faixas.Add (horarios [ac.Name]); } } } p = 6; //Feriados comuns a todos os portoes string holidaysStr = String.Empty; foreach (var holiday in Holidays) if (string.IsNullOrEmpty (holiday.GateLicId)) holidaysStr += string.Format ("{0:ddMM}", holiday.Date); p = 7; BleDevice portao = null; // loop de portoes Console.WriteLine ($"loop com {Gates.Count} portoes"); foreach (var gate in Gates) { portao = new BleDevice (gate.BleId, gate.Name); portao.codigoAutorizacao = gate.Code; Console.WriteLine ("Activation code: " + gate.Code); portao.feriados = holidaysStr; //Feriados especificos de um portao foreach (var holiday in Holidays) if (holiday.GateLicId.Equals (gate.Id)) portao.feriados += string.Format ("{0:YYYY-dd-MM}", holiday.Date); List<MySafetyDll.BleDevice> devices = new List<BleDevice> (); var skeysPortao = new Repository<GateDevices> ().GetAllAsync ().Result.Where (gd => gd.GateBleId == gate.Id); p = 8; foreach (var gateDevice in skeysPortao) { var bleDevice = new BleDevice (gateDevice.SkeyBleId, gateDevice.SkeyBleId); devices.Add (bleDevice); if (gateDevice.Perfil != null) { if (gateDevice.Perfil.Equals ("Liberado")) bleDevice.perfil = MySafetyDll.MySafety.PERFIL_LIBERADO_GERAL; else { bleDevice.perfil = MySafetyDll.MySafety.PERFIL_BLOQUEADO; if (!gateDevice.Perfil.Equals ("Bloqueado")) { if (perfis.ContainsKey (gateDevice.Perfil)) bleDevice.perfil = perfis [gateDevice.Perfil]; } } } p = 9; mysafetyDll.setaPortao (portao); mysafetyDll.preparaListaBranca (portao, devices); } mysafetyDll.setaPortao (portao); string result = mysafetyDll.preparaListaBranca (portao, devices); if (!string.IsNullOrEmpty (result)) Console.WriteLine (p + "Erro no prepara dll: " + result + portao + " --- " + mysafetyDll.horariosVerao.Length + mysafetyDll.horariosVerao); else { Console.WriteLine ("Tudo certo!" + p); inicializando = false; return; } } } Console.WriteLine ("Faltou algo!" + p); } catch (Exception ex) { Console.WriteLine (p + " Exception - " + ex.Message); } }
public GerenciarPerfisViewModel (INavigation navigation, AccessProfiles accessProfileEdit = null) { Navigation = navigation; listHorariosDisponiveis = new ObservableCollection<AccessTimes> (new Repository<AccessTimes> ().GetAllAsync ().Result.Where (at => at.UserId == Settings.user_Id).OrderBy (ac => ac.Name)); listHorariosAdicionados = new ObservableCollection<AccessTimes> (); if (accessProfileEdit != null) { AccessProfileEdit = accessProfileEdit; //Monta lista dos adicionados AccessTimes at; int pos; for (int i = 0; i < 8; i++) if (!string.IsNullOrEmpty (AccessProfileEdit.AcessTimeId (i))) { at = new AccessTimes (AccessProfileEdit.AcessTimeId (i)); if ((pos = listHorariosDisponiveis.IndexOf (at)) >= 0) { // Console.WriteLine("Adicionou:" + listHorariosDisponiveis[pos].Name); listHorariosDisponiveis [pos].IsSelected = true; listHorariosAdicionados.Add (listHorariosDisponiveis [pos]); listHorariosDisponiveis.RemoveAt (pos); } //foreach (var disponivel in listHorariosDisponiveis) //{ // if (!listHorariosAdicionados.Contains(disponivel)) // listHorariosAdicionados.Add(disponivel); //} } IsEditing = true; IsAutoMovel = accessProfileEdit.IsA; IsPedestre = accessProfileEdit.IsP; //formato= ddMMyy ExpireDate = new DateTime (Int32.Parse (accessProfileEdit.Expire.Substring (4, 2)),// ano Int32.Parse (accessProfileEdit.Expire.Substring (2, 2)), //mes Int32.Parse (accessProfileEdit.Expire.Substring (0, 2)), //dia 0, 0, 0, DateTimeKind.Local); Name = accessProfileEdit.Name; } else { AccessProfileEdit = new AccessProfiles (); ExpireDate = DateTime.Today.AddYears (1); } CommandSaveProfile = new Command (async () => { if (string.IsNullOrEmpty (Name)) { Clean = false; await notificator.Notify (ToastNotificationType.Error, "Erro", "Nome é obrigatório", TimeSpan.FromSeconds (2)); return; } if (!IsAutoMovel && !IsPedestre) { Clean = false; await notificator.Notify (ToastNotificationType.Error, "Erro", "Perfil deve ter pelo menos um tipo de acesso", TimeSpan.FromSeconds (2)); return; } if ((listHorariosAdicionados == null || listHorariosAdicionados.Count == 0)) { await notificator.Notify (ToastNotificationType.Error, "Erro", "Perfil deve ter pelo menos um horário", TimeSpan.FromSeconds (2)); return; } if (!IsEditing && new Repository<AccessProfiles> ().GetAllAsync ().Result.Any (ap => ap.Name == Name)) { Clean = false; await notificator.Notify (ToastNotificationType.Error, "Erro", "Perfil com esse nome já existe", TimeSpan.FromSeconds (2)); return; } AccessProfileEdit.Expire = String.Format ("{0:ddMMyy}", ExpireDate); AccessProfileEdit.IsA = IsAutoMovel; AccessProfileEdit.IsP = IsPedestre; AccessProfileEdit.Name = Name; int fim = listHorariosAdicionados.Count; for (int i = 0; i < 8; i++) { if (i < fim) AccessProfileEdit.AcessTimeId (i, listHorariosAdicionados [i].Id); else AccessProfileEdit.AcessTimeId (i, string.Empty); } if (IsEditing) { await new Repository<AccessProfiles> ().UpdateAsync (AccessProfileEdit); await notificator.Notify (ToastNotificationType.Info, "MySafety", "Perfil atualizado", TimeSpan.FromSeconds (3)); } else { AccessProfileEdit.Id = Guid.NewGuid ().ToString (); AccessProfileEdit.UserId = Settings.user_Id; Clean = true; Name = string.Empty; ExpireDate = DateTime.Today.AddYears (1); IsAutoMovel = false; IsPedestre = false; await notificator.Notify (ToastNotificationType.Success, "MySafety", "Perfil adicionado", TimeSpan.FromSeconds (2)); await new Repository<AccessProfiles> ().CreateAsync (AccessProfileEdit); } }); }