public void StartSync()
        {
            try
            {
                LoggerUtility.InitializeLogger();
                int      BranchID      = 45;
                DateTime syncStartTime = DateTime.Now.AddMinutes(-15);
                //LoggerUtility.Logger.Info($"Warehouse sync started at {syncStartTime.ToLongTimeString()}");
                //Console.Clear();
                Console.WriteLine($"Warehouse sync started at {syncStartTime.ToLongTimeString()}");
                WarehouseRepository warehouseRepository = new WarehouseRepository();
                CloudRepository     cloudRepository     = new CloudRepository();
                DataTable           dtEntity            = cloudRepository.GetEntityData(BranchID, "ToCloud");
                foreach (DataRow entityRow in dtEntity.Rows)
                {
                    string entityName = entityRow["ENTITYNAME"].ToString();
                    //LoggerUtility.Logger.Info($"{entityName} up sync started");
                    //Console.WriteLine($"{entityName} up sync started");
                    DataTable dtEntityWiseData = warehouseRepository.GetEntityWiseData(entityName, entityRow["SYNCDATE"]);
                    //LoggerUtility.Logger.Info($"Found {dtEntityWiseData.Rows.Count} records to up sync in entity : {entityName} ");
                    Console.WriteLine($"Found {dtEntityWiseData.Rows.Count} records to up sync in entity : {entityName} ");
                    cloudRepository.SaveData(entityName, dtEntityWiseData);
                    cloudRepository.UpdateEntitySyncStatus(entityRow["ENTITYSYNCSTATUSID"], syncStartTime);
                    //LoggerUtility.Logger.Info($"{entityName} up sync completed");
                    //Console.WriteLine($"{entityName} up sync completed");
                }

                // start down sync from cloud
                dtEntity = cloudRepository.GetEntityData(BranchID, "FromCloud");
                foreach (DataRow entityRow in dtEntity.Rows)
                {
                    string entityName = entityRow["ENTITYNAME"].ToString();
                    //LoggerUtility.Logger.Info($"{entityName} down sync started");
                    //Console.WriteLine($"{entityName} down sync started");
                    DataTable dtEntityWiseData = cloudRepository.GetEntityWiseData(entityName, entityRow["SYNCDATE"]);
                    //LoggerUtility.Logger.Info($"Found {dtEntityWiseData.Rows.Count} records to down sync in entity : {entityName} ");
                    Console.WriteLine($"Found {dtEntityWiseData.Rows.Count} records to down sync in entity : {entityName} ");
                    warehouseRepository.SaveData(entityName, dtEntityWiseData);
                    cloudRepository.UpdateEntitySyncStatus(entityRow["ENTITYSYNCSTATUSID"], syncStartTime);
                    //LoggerUtility.Logger.Info($"{entityName} down sync completed");
                    //Console.WriteLine($"{entityName} down sync completed");
                }

                //LoggerUtility.Logger.Info($"Warehouse sync completed");
                Console.WriteLine($"Warehouse sync completed");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                Console.ReadLine();
            }
            Thread.Sleep(5 * 60 * 1000);
            StartSync();
        }
        public static void StartSync(BackgroundWorker backgroundWorker, bool forceFullSync = false)
        {
            try
            {
                LoggerUtility.InitializeLogger();
                DateTime syncStartTime = DateTime.Now.AddMinutes(-15);
                //LoggerUtility.Logger.Info($"POS sync started at {syncStartTime.ToLongTimeString()}");
                backgroundWorker?.ReportProgress(0, $"POS sync started at {syncStartTime.ToLongTimeString()}");
                SyncRepository  syncRepository  = new SyncRepository();
                CloudRepository cloudRepository = new CloudRepository();
                DataTable       dtEntity        = cloudRepository.GetEntityData(branchinfo.BranchCounterID, "FromCloud");
                foreach (DataRow entityRow in dtEntity.Rows)
                {
                    string entityName = entityRow["ENTITYNAME"].ToString();
                    //LoggerUtility.Logger.Info($"{entityName} down sync started");
                    ReportText(backgroundWorker, $"{entityName} down sync started");
                    DataTable dtEntityWiseData = cloudRepository.GetEntityWiseData(
                        entityName,
                        forceFullSync ? "01-01-1900" : entityRow["SYNCDATE"]
                        , branchinfo.BranchID);
                    ReportText(backgroundWorker, $"Found {dtEntityWiseData.Rows.Count} records to down sync in entity : {entityName} ");
                    syncRepository.SaveData(entityName, dtEntityWiseData);
                    cloudRepository.UpdateEntitySyncStatus(entityRow["ENTITYSYNCSTATUSID"], syncStartTime);
                    ReportText(backgroundWorker, $"{entityName} down sync completed");
                }

                // start up sync
                dtEntity = cloudRepository.GetEntityData(branchinfo.BranchCounterID, "ToCloud");
                foreach (DataRow entityRow in dtEntity.Rows)
                {
                    string entityName = entityRow["ENTITYNAME"].ToString();
                    ReportText(backgroundWorker, $"{entityName} up sync started");
                    DataTable dtEntityWiseData = syncRepository.GetEntityWiseData(entityName, entityRow["SYNCDATE"]);
                    ReportText(backgroundWorker, $"Found {dtEntityWiseData.Rows.Count} records to up sync in entity : {entityName} ");
                    cloudRepository.SaveData(entityName, dtEntityWiseData);
                    cloudRepository.UpdateEntitySyncStatus(entityRow["ENTITYSYNCSTATUSID"], syncStartTime);
                    ReportText(backgroundWorker, $"{entityName} up sync completed");
                }

                // clear old data
                ReportText(backgroundWorker, $"clearing one month old data");
                syncRepository.ClearOldData();

                //LoggerUtility.Logger.Info($"POS sync completed");
                backgroundWorker?.ReportProgress(0, $"POS sync completed at {DateTime.Now.ToLongTimeString()}");
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show($"Error while running sync : {ex.Message} {Environment.NewLine} {ex.StackTrace}");
            }
        }
        public async void ObterDicas()
        {
            DeviceRepository deviceRepository = new DeviceRepository();
            var dicas = deviceRepository.ObterDicas();

            for (int index = 0; index < dicas.Count; index++)
            {
                var dica = dicas[index];

                if (index + 1 > Dicas.Count || Dicas[index].Equals(dica))
                {
                    Image   image      = new Image();
                    IFolder rootFolder = FileSystem.Current.LocalStorage;
                    IFile   file       = rootFolder.GetFileAsync(dica.NomeArquivo).Result;
                    Stream  s          = file.OpenAsync(FileAccess.Read).Result;

                    dica.ImagemBinding.Source = ImageSource.FromStream(() => s);

                    Dicas.Insert(index, dica);
                }
            }

            CloudRepository cloudRepository = new CloudRepository();
            var             dicasCloud      = await cloudRepository.ObterDicas();

            if (dicasCloud != null && dicasCloud.Count > 0)
            {
                for (int index = 0; index < dicas.Count; index++)
                {
                    var dicaCloud = dicas[index];

                    Image   image      = new Image();
                    IFolder rootFolder = FileSystem.Current.LocalStorage;
                    IFile   file       = rootFolder.GetFileAsync(dicaCloud.NomeArquivo).Result;
                    Stream  s          = file.OpenAsync(FileAccess.Read).Result;

                    dicaCloud.ImagemBinding.Source = ImageSource.FromStream(() => s);

                    for (int i = 0; i < Dicas.Count; i++)
                    {
                        if (Dicas[i].ID == dicaCloud.ID)
                        {
                            Dicas[i] = dicaCloud;
                        }
                    }
                }
            }
        }