Beispiel #1
0
        public async void retrieveAndDisplayFirstPageTenders()
        {
            activityIndicator.IsRunning = true;
            activityIndicator.IsVisible = true;

            //Retrieve originating sources from server
            string origSourceHttpTask = await Task.Run <string>(() => HttpRequestHandler.PostRetrieveOrigSources());

            while (origSourceHttpTask == null)
            {
                origSourceHttpTask = await Task.Run <string>(() => HttpRequestHandler.PostRetrieveOrigSources());
            }

            if (origSourceHttpTask != null)
            {
                if (origSourceHttpTask != "Originating sources not found")
                {
                    Console.WriteLine("HTTP TASK IS: " + origSourceHttpTask);
                    originatingSources = JsonConvert.DeserializeObject <List <string> >(origSourceHttpTask);
                    currentFilter      = originatingSources; //Default filter contain all sources
                }
            }

            //Show tenders from database first if exists, then clear database to make way for new tenders
            List <tenderItem> dbtenders1 = await Task.Run <List <tenderItem> >(() => retrieveTenderFromDatabase(1));

            //List<tenderItem> dbtenders2 = await Task.Run<List<tenderItem>>(() => retrieveTenderFromDatabase(2));
            if (dbtenders1.Count > 0)
            {
                if (userSession.username != "")
                {
                    List <tenderBookmark> bookmarkHttpTask = await Task.Run <List <tenderBookmark> >(() => retrieveBookmark());

                    List <tenderBookmark> tenderBookmarks = bookmarkHttpTask.ToList();
                    if (tenderBookmarks.Count > 0)
                    {
                        foreach (var tenderItem in dbtenders1)
                        {
                            foreach (var tenderBookmark in tenderBookmarks)
                            {
                                if (tenderItem.Reference != "" && tenderItem.Reference != null)
                                {
                                    if (tenderItem.Reference == tenderBookmark.tenderReferenceNumber)
                                    {
                                        tenderItem.BookmarkImage = "bookmarkfilled.png";
                                        break;
                                    }
                                }
                                else
                                {
                                    if (tenderItem.Title == tenderBookmark.tenderTitle)
                                    {
                                        tenderItem.BookmarkImage = "bookmarkfilled.png";
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                tenderListing        = dbtenders1;
                listView.ItemsSource = dbtenders1;

                /*if (dbtenders2.Count > 0)
                 * {
                 *  nextPage.IsVisible = true;
                 * }*/
                filterButton.IsVisible      = true;
                sortButton.IsVisible        = true;
                activityIndicator.IsRunning = false;
                activityIndicator.IsVisible = false;
                await WaitAndExecuteUpdateTenders(10000);
            }
            else
            {
                //Sending HTTP request to obtain the SEB tender page data
                //string httpTask = await Task.Run<string>(() => getPageData("http://www2.sesco.com.my/etender/notice/notice.jsp"));
                //var httpResult = httpTask;

                //Extract tender data from the response
                //var tenders = await DataExtraction.getWebData(httpResult, "tender");

                //Retrieve Telekom tenders
                //string httpTaskTelekom = await Task.Run<string>(() => getPageData("https://www.tm.com.my/DoingBusinessWithTM/pages/notices.aspx?Year=2018"));
                //var httpResultTelekom = httpTaskTelekom;
                //Console.WriteLine("TELEKOM: " + httpTaskTelekom);
                //Extract tender data from the response
                //var tendersTelekom = await DataExtraction.getWebData(httpResultTelekom, "telekom");

                //List<tenderItem> tenderItems = (List<tenderItem>)tendersTelekom;
                //tenderItems.AddRange((List<tenderItem>)tenders);
                //Get bookmark details from online database

                List <scrapped_tender> scrappedTenders = new List <scrapped_tender>();
                List <tenderItem>      tenderItems     = new List <tenderItem>();
                //Retrieve tenders from server
                string url            = "https://pockettender.000webhostapp.com/process_getTenders.php";
                string httpTaskResult = await Task.Run <string>(() => HttpRequestHandler.GetRequest(url, false));

                if (httpTaskResult != null)
                {
                    if (httpTaskResult != "No tender found")
                    {
                        scrappedTenders = JsonConvert.DeserializeObject <List <scrapped_tender> >(httpTaskResult);

                        if (scrappedTenders != null)
                        {
                            Console.WriteLine("Number of scrapped tenders: " + scrappedTenders.Count);
                            //Convert scrapped tender item into tender item
                            foreach (scrapped_tender scrappedTender in scrappedTenders)
                            {
                                tenderItem tender = new tenderItem();
                                tender.Company            = scrappedTender.originatingSource;
                                tender.TenderSource       = scrappedTender.tenderSource;
                                tender.Reference          = scrappedTender.reference;
                                tender.Agency             = scrappedTender.agency;
                                tender.Title              = scrappedTender.title;
                                tender.Category           = scrappedTender.category;
                                tender.OriginatingStation = scrappedTender.originatingSource;
                                tender.ClosingDate        = scrappedTender.closingDate;

                                //{"bidCloseDate":"N\/A","feeBeforeGST":"RM 0.00","feeGST":"RM 0.00","feeAfterGST":"RM 0.00"}
                                //{ "name":"Francesca Lim","officePhone":"082-441188","extension":"1126","mobilePhone":null,"email":null,"fax":null}
                                //{"PMS106-14-Instruction.pdf":"http:\/\/www2.sesco.com.my\/noticeDoc\/PMS106-14-Instruction.pdf"}

                                if (scrappedTender.docInfoJson != null)
                                {
                                    dynamic docInfo = JsonConvert.DeserializeObject(scrappedTender.docInfoJson);
                                    if (docInfo != null)
                                    {
                                        if (docInfo.bidCloseDate != null)
                                        {
                                            tender.BidClosingDate = docInfo.bidCloseDate;
                                        }

                                        if (docInfo.feeBeforeGST != null)
                                        {
                                            tender.FeeBeforeGST = docInfo.feeBeforeGST;
                                        }

                                        if (docInfo.feeGST != null)
                                        {
                                            tender.FeeGST = docInfo.feeGST;
                                        }

                                        if (docInfo.feeAfterGST != null)
                                        {
                                            tender.FeeAfterGST = docInfo.feeAfterGST;
                                        }
                                    }
                                }

                                if (scrappedTender.originatorJson != null)
                                {
                                    dynamic originatorInfo = JsonConvert.DeserializeObject(scrappedTender.originatorJson);
                                    if (originatorInfo != null)
                                    {
                                        if (originatorInfo.name != null)
                                        {
                                            tender.Name = originatorInfo.name;
                                        }

                                        if (originatorInfo.officePhone != null)
                                        {
                                            tender.OffinePhone = originatorInfo.officePhone;
                                        }

                                        if (originatorInfo.extension != null)
                                        {
                                            tender.Extension = originatorInfo.extension;
                                        }

                                        if (originatorInfo.mobilePhone != null)
                                        {
                                            tender.MobilePhone = originatorInfo.mobilePhone;
                                        }

                                        if (originatorInfo.email != null)
                                        {
                                            tender.Email = originatorInfo.email;
                                        }

                                        if (originatorInfo.fax != null)
                                        {
                                            tender.Fax = originatorInfo.fax;
                                        }
                                    }
                                }

                                if (scrappedTender.fileLinks != null)
                                {
                                    Dictionary <string, string> fileLinks = JsonConvert.DeserializeObject <Dictionary <string, string> >(scrappedTender.fileLinks);
                                    tender.FileLinks = fileLinks;
                                    //{"Folder 1.zip":"http:\/\/www2.sesco.com.my\/noticeDoc\/Folder 1.zip","Folder 2.zip":"http:\/\/www2.sesco.com.my\/noticeDoc\/Folder 2.zip","Folder 3.zip":"http:\/\/www2.sesco.com.my\/noticeDoc\/Folder 3.zip","Folder 4.zip":"http:\/\/www2.sesco.com.my\/noticeDoc\/Folder 4.zip"}
                                }
                                tenderItems.Add(tender);
                            }
                        }

                        if (userSession.username != "")
                        {
                            List <tenderBookmark> bookmarkHttpTask = await Task.Run <List <tenderBookmark> >(() => retrieveBookmark());

                            List <tenderBookmark> tenderBookmarks = bookmarkHttpTask.ToList();
                            if (tenderBookmarks.Count > 0)
                            {
                                foreach (var tenderItem in tenderItems)
                                {
                                    foreach (var tenderBookmark in tenderBookmarks)
                                    {
                                        if (tenderItem.Reference != "" && tenderItem.Reference != null)
                                        {
                                            if (tenderItem.Reference == tenderBookmark.tenderReferenceNumber)
                                            {
                                                tenderItem.BookmarkImage = "bookmarkfilled.png";
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            if (tenderItem.Title == tenderBookmark.tenderTitle)
                                            {
                                                tenderItem.BookmarkImage = "bookmarkfilled.png";
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        Console.WriteLine("Num of tender items: " + tenderItems.Count);
                        tenderListing        = tenderItems;
                        listView.ItemsSource = tenderItems;
                    }
                }

                //Save page 1 tenders to database
                await saveToTenderDb(tenderItems, 1);

                //save subsequent page tenders to database;
                //await storeAllTenders();
                filterButton.IsVisible      = true;
                sortButton.IsVisible        = true;
                activityIndicator.IsRunning = false;
                activityIndicator.IsVisible = false;

                await WaitAndExecuteUpdateTenders(10800000);
            }
        }