Пример #1
0
 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));
         }
     }
 }
Пример #2
0
		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);
				}

			});
		}