public static void UploadRecordAsync(string psCustomer, string psValue, string psFileName)
        {
            Dictionary <string, object> loReturn;
            string    lsSQL = "";
            DataTable loDataReturn;
            int       liRecordID = 0;

            try
            {
                lsSQL = "insert into CustomerOrder(Property,Customer,action,value,file,hash,status)"
                        + " values('{0}','{1}','{2}','{3}','{4}','{5}','{6}') ; "
                        + " select last_insert_rowid() CusOrderID; ";


                loDataReturn = Library.ClsEvilApi.moDatabase.Query(String.Format(lsSQL,
                                                                                 "Trung Hung Tran", ClsSQLite.FixStr(psCustomer), "order created", ClsSQLite.FixStr(psValue), ClsSQLite.FixStr(psFileName), "", "uploading"));
                liRecordID = int.Parse(loDataReturn.Rows[0][0].ToString());

                loReturn = UploadCustomer(psCustomer, psValue, psFileName, liRecordID);
            }
            catch (Exception ex)
            {
                lsSQL = " update CustomerOrder set status  ='{0}' where CusOrderID ={1} ;  ";

                Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, ClsSQLite.FixStr(ex.Message), liRecordID));
            }
        }
        //private static await UploadCustomerAsync(string psCustomer, string psValue, string psFileName, int liRecordID)
        //{
        //    throw new NotImplementedException();
        //}

        public static DataTable SearchCustomerOrder(string psCondition, string psCustomer)
        {
            DataTable loDatatable = null;
            string    lsSQL;

            lsSQL = "select * from CustomerOrder " + psCondition;
            if (psCustomer != "")
            {
                lsSQL = lsSQL + String.Format(" and Customer like '%{0}%'", ClsSQLite.FixStr(psCustomer));
            }
            loDatatable = moDatabase.Query(lsSQL);
            return(loDatatable);
        }
        public static DataSet GetHashKey(string psHashKey)
        {
            DataSet loReturnDs = null;

            DataTable loLocalTb;
            DataTable loReturnTb;
            DataRow   loReturnRow;
            Dictionary <string, object> loRemote;
            string lssql;


            // check from server
            loRemote   = ClsEvilApi.CheckHashKey(psHashKey);
            loReturnDs = new DataSet();

            loReturnTb = new DataTable("Hash Key from EVIL");

            loReturnTb.Columns.Add("PropertyName");
            loReturnTb.Columns.Add("Value");
            foreach (string lskey in loRemote.Keys)
            {
                loReturnRow = loReturnTb.NewRow();
                loReturnTb.Rows.Add(loReturnRow);
                loReturnRow[0] = lskey;
                if (lskey == "errors")
                {
                    System.Collections.ArrayList loError = (System.Collections.ArrayList)loRemote["errors"];
                    loReturnRow[1] = string.Join(", ", loError.Cast <string>().ToArray());
                }
                else
                {
                    loReturnRow[1] = loRemote[lskey];
                }
            }

            loReturnDs.Tables.Add(loReturnTb);


            //check from local
            lssql = "select * from CustomerOrder where Hash='{0}'";
            if (psHashKey == null)
            {
                psHashKey = "N/A";
            }
            loLocalTb = moDatabase.Query(String.Format(lssql, ClsSQLite.FixStr(psHashKey)));

            if (loLocalTb.Rows.Count > 0)
            {
                loReturnTb = new DataTable("Hash Key from local database.");

                loReturnTb.Columns.Add("PropertyName");
                loReturnTb.Columns.Add("Value");
                foreach (DataRow row in loLocalTb.Rows)
                {
                    foreach (DataColumn col in loLocalTb.Columns)
                    {
                        loReturnRow = loReturnTb.NewRow();
                        loReturnTb.Rows.Add(loReturnRow);
                        loReturnRow[0] = col.ColumnName;
                        loReturnRow[1] = row[col.ColumnName];
                    }
                }
                loReturnDs.Tables.Add(loReturnTb);
            }


            return(loReturnDs);
        }
        private static async System.Threading.Tasks.Task <Dictionary <string, object> > UploadCustomerAsync(string psCustomerName, string psValue, string psFileName, int piCusID)
        {
            Dictionary <string, object> loReturn;
            string lsMessage;
            Dictionary <string, object> loJsonValue = new Dictionary <string, object>();
            JavaScriptSerializer        loJson      = new JavaScriptSerializer();
            string lsJson = "";
            string lsSQL;

            try
            {
                loJsonValue.Add("property", "Trung Hung Tran");
                loJsonValue.Add("customer", psCustomerName);
                loJsonValue.Add("action", "order created");
                loJsonValue.Add("value", psValue);
                loJsonValue.Add("file", psFileName);
                lsJson = loJson.Serialize(loJsonValue);



                try
                {
                    using (var loClient = new HttpClient())
                    {
                        loClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                        HttpResponseMessage loHttpRessult = await loClient.PostAsync(msUploadURL, new StringContent(lsJson));

                        lsJson = await loHttpRessult.Content.ReadAsStringAsync();
                    }

                    loReturn = loJson.Deserialize <Dictionary <string, object> >(lsJson);
                    if (loReturn.ContainsKey("errors"))
                    {
                        System.Collections.ArrayList loError = (System.Collections.ArrayList)loReturn["errors"];

                        lsMessage = string.Join(", ", loError.Cast <string>().ToArray());
                        lsSQL     = " update CustomerOrder set status  ='{0} : {1}' where CusOrderID ={2} ;  ";

                        Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, loReturn["added"], ClsSQLite.FixStr(lsMessage), piCusID));
                    }
                    else if (loReturn.ContainsKey("hash"))
                    {
                        lsSQL = " update CustomerOrder set status  ='{0}', hash ='{1}' where CusOrderID ={2} ;  ";

                        Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, loReturn["added"], ClsSQLite.FixStr((string)loReturn["hash"]), piCusID));
                    }
                }
                catch (WebException wex)
                {
                    lsJson = new StreamReader(wex.Response.GetResponseStream())
                             .ReadToEnd();
                    loReturn = loJson.Deserialize <Dictionary <string, object> >(lsJson);
                }
            }
            catch
            {
                loReturn = null;
            }
            return(loReturn);
        }
        private static Dictionary <string, object> UploadCustomer(string psCustomerName, string psValue, string psFileName, int piCusOrderID)
        {
            //string lsReturnHashkey = "";
            Dictionary <string, object> loReturn;
            WebRequest  loWebRequest;
            WebResponse loWebResponse;

            JavaScriptSerializer loJson = new JavaScriptSerializer();
            string lsMessage;
            string lsSQL;
            Dictionary <string, object> loJsonValue = new Dictionary <string, object> ();
            string lsJson = "";

            try
            {
                loJsonValue.Add("property", "Trung Hung Tran");
                loJsonValue.Add("customer", psCustomerName);
                loJsonValue.Add("action", "order created");
                loJsonValue.Add("value", psValue);
                loJsonValue.Add("file", psFileName);

                loWebRequest = WebRequest.Create(msUploadURL);


                loWebRequest.Method      = "POST";
                loWebRequest.ContentType = "application/json";
                lsJson = loJson.Serialize(loJsonValue);
                byte[] json = System.Text.Encoding.UTF8.GetBytes(lsJson);

                Stream requestStream = loWebRequest.GetRequestStream();
                requestStream.Write(json, 0, json.Length);
                requestStream.Close();
                try
                {
                    loWebResponse = loWebRequest.GetResponse();
                    lsJson        = new StreamReader(loWebResponse.GetResponseStream())
                                    .ReadToEnd();

                    loReturn = loJson.Deserialize <Dictionary <string, object> >(lsJson);

                    if (loReturn.ContainsKey("errors"))
                    {
                        System.Collections.ArrayList loError = (System.Collections.ArrayList)loReturn["errors"];

                        lsMessage = string.Join(", ", loError.Cast <string>().ToArray()) + "";
                        lsSQL     = " update CustomerOrder set status  ='{0} : {1}' where CusOrderID ={2} ;  ";

                        Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, loReturn["added"], ClsSQLite.FixStr(lsMessage), piCusOrderID));
                    }
                    else if (loReturn.ContainsKey("hash"))
                    {
                        if (((string)loReturn["hash"]).Length == 32)
                        {
                            lsSQL = " update CustomerOrder set status  ='{0}', hash ='{1}' where CusOrderID ={2} ;  ";

                            Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, loReturn["added"], ClsSQLite.FixStr((string)loReturn["hash"]), piCusOrderID));
                        }
                        else
                        {
                            lsMessage = "Server Error Invalid hash return.";
                            lsSQL     = " update CustomerOrder set status  ='{0} : {1}' where CusOrderID ={2} ;  ";


                            Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, "error", ClsSQLite.FixStr(lsMessage), piCusOrderID));
                        }
                    }
                }
                catch (WebException wex)
                {
                    lsJson = new StreamReader(wex.Response.GetResponseStream())
                             .ReadToEnd();
                    loReturn = loJson.Deserialize <Dictionary <string, object> >(lsJson);

                    if (loReturn.ContainsKey("errors"))
                    {
                        System.Collections.ArrayList loError = (System.Collections.ArrayList)loReturn["errors"];

                        lsMessage = string.Join(", ", loError.Cast <string>().ToArray());
                        lsSQL     = " update CustomerOrder set status  ='{0} : {1}' where CusOrderID ={2} ;  ";


                        Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, "error", ClsSQLite.FixStr(lsMessage), piCusOrderID));
                    }
                }
            }
            catch (Exception ex)
            {
                lsSQL = " update CustomerOrder set status  ='{0} : {1}' where CusOrderID ={2} ;  ";


                Library.ClsEvilApi.moDatabase.Exec(String.Format(lsSQL, "error", ClsSQLite.FixStr(ex.Message), piCusOrderID));

                loReturn = null;
            }
            return(loReturn);
        }