Utopia-Weight-Scale/WindowsFormsApp1/DataAccessObject .cs

552 lines
21 KiB
C#

using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using static UWS.BusinessLayer;
namespace UWS
{
class DataAccessObject
{
//********* URLs with IP Address (Local):
//string POST_END_POINT_URL_LOCAL = "http://192.168.90.223:8081/uind/rest/uic/loading-vehicle-weight-info/save-details";
//string GET_END_POINT_URL_LOCAL = "http://192.168.90.223:8081/uind/rest/uic/loading-vehicle-weight-info/get-loading-vehicle-weight-and-request-info?req-code=";
//string urlGetVehicle = $"http://192.168.90.223:8081/uind/rest/uic/loading-vehicle-weight-info/get-loading-vehicle-weight-and-request-info-vehicle-no?vehicle-no=";
//string urlDc = "http://192.168.90.223:8081/uind/rest/uic/dispatch-challan-weight-info/save-details";
//string urlTrolley = "http://192.168.90.223:8081/uind/rest/uic/dispatch-challan-weight-info/get-trolleys";
//************ URLs without IP Address (Production):
string POST_END_POINT_URL = "https://portal.utopiaindustries.pk/uind/rest/uic/loading-vehicle-weight-info/save-details";
string GET_END_POINT_URL = "https://portal.utopiaindustries.pk/uind/rest/uic/loading-vehicle-weight-info/get-loading-vehicle-weight-and-request-info?req-code=";
string urlDc = "https://portal.utopiaindustries.pk/uind/rest/uic/dispatch-challan-weight-info/save-details";
string urlGetVehicle = $"https://portal.utopiaindustries.pk/uind/rest/uic/loading-vehicle-weight-info/get-loading-vehicle-weight-and-request-info-vehicle-no?vehicle-no=";
string urlTrolley = "https://portal.utopiaindustries.pk/uind/rest/uic/dispatch-challan-weight-info/get-trolleys";
static MySqlConnection connection;
private static string server;
private static string database;
private static string uid;
private static string password;
public MySqlConnection Connection()
{
server = "utopia-industries-rr.c5qech8o9lgg.us-east-1.rds.amazonaws.com";
database = "inventory";
uid = "muhammad.faique";
password = "21)3lq6b!A@.";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
return connection;
}
public bool OpenConnection()
{
try
{
Connection();
connection.Open();
Console.WriteLine("Connected !");
return true;
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 0:
Console.WriteLine("Cannot connect to server. Contact administrator");
break;
case 1045:
Console.WriteLine("Invalid username/password, please try again");
break;
}
return false;
}
}
public bool CloseConnection()
{
try
{
Connection();
connection.Close();
return true;
}
catch (MySqlException ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
public async Task<string> postDataAsyncWithoutFMS(string vehicleNo, Int32 weight, string date, string typee, string comment, Int32 userid, string siteID, string item, string transporter, string location,string container_no)
{
try
{
DateTime parsedDate = DateTime.ParseExact(date, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
string convertedDate = parsedDate.ToString("yyyy-MM-ddTHH:mm");
// Ensure TLS 1.2 is used
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(1);
// Serialize the data to JSON
// Create an anonymous object to hold the data
string siteNumberStr = siteID.Substring(siteID.IndexOf('-') + 1);
// Convert to integer
int siteNumber = int.Parse(siteNumberStr);
var data = new
{
type = typee,
vehicleNo = vehicleNo,
weight = weight,
userId = userid,
dateTime = convertedDate,
comment = comment,
siteId = siteNumberStr,
productCode = item,
transporterCode = transporter,
partyCode = location,
containerNo = container_no
};
// Convert the data object to a JSON string
string jsonData = JsonConvert.SerializeObject(data);
// Create a StringContent object with JSON data
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// Send a POST request with the data
//var response = await client.PostAsync(POST_END_POINT_URL, content);
var response = await client.PostAsync(POST_END_POINT_URL, content);
if (response.IsSuccessStatusCode)
{
// Handle a successful response
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
string responseString = await response.Content.ReadAsStringAsync();
// Handle an unsuccessful response
return responseString;
}
}
catch (Exception ex)
{
return "Error";
}
}
//public async Task<string> postDataWithoutFMS(string vehicleNO, string weightText, string dateText, string type, string comment, Int32 userid, string item, string transporter, string location, string site_id)
//{
// try
// {
// int deadWeight = 0;
// int finalWeight = 0;
// DateTime deadWeightDateTime = DateTime.MinValue;
// DateTime finalWeightDateTime = DateTime.MinValue;
// int netWeight = 0;
// // Determine whether we are working with dead weight or final weight
// if (type == "1")
// {
// // Dead weight logic
// deadWeight = Convert.ToInt32(weightText);
// deadWeightDateTime = Convert.ToDateTime(dateText);
// }
// else
// {
// // Final weight logic
// finalWeight = Convert.ToInt32(weightText);
// finalWeightDateTime = Convert.ToDateTime(dateText);
// // Assuming you have dead weight already stored somewhere, calculate net weight
// // For simplicity, we'll subtract deadWeight from finalWeight
// // Replace this with actual logic if needed
// netWeight = finalWeight - deadWeight;
// }
// // Preparing the SQL query to insert data into the table
// string query = @"INSERT INTO loading_vehicle_weight_info
// (type, vehicle_request_code, dead_weight, final_weight,
// dead_weight_datetime, final_weight_datetime, user_id,
// net_weight, comment,site_id,vehicle_no,party_code,transporter_code,product_code,is_fms)
// VALUES (@Type, @VehicleRequestCode, @DeadWeight, @FinalWeight,
// @DeadWeightDateTime, @FinalWeightDateTime, @UserId,
// @NetWeight, @Comment,@site_id,@vehicle_no,@party_code,@transporter_code,@product_code,1)";
// // Preparing parameters for the query
// var parameters = new MySqlParameter[]
// {
// new MySqlParameter("@Type", Convert.ToInt32(type)),
// new MySqlParameter("@VehicleRequestCode", vehicleNO+"-"+DateTime.Now),
// new MySqlParameter("@DeadWeight", deadWeight),
// new MySqlParameter("@FinalWeight", finalWeight),
// new MySqlParameter("@DeadWeightDateTime", deadWeightDateTime != DateTime.MinValue ? (object)deadWeightDateTime : DBNull.Value),
// new MySqlParameter("@FinalWeightDateTime", finalWeightDateTime != DateTime.MinValue ? (object)finalWeightDateTime : DBNull.Value),
// new MySqlParameter("@UserId", userid),
// new MySqlParameter("@NetWeight", netWeight),
// new MySqlParameter("@Comment", comment),
// new MySqlParameter("@site_id", site_id),
// new MySqlParameter("@vehicle_no", vehicleNO),
// new MySqlParameter("@party_code", comment),
// new MySqlParameter("@transporter_code", userid),
// new MySqlParameter("@product_code", netWeight)
// };
// // Execute the query using your data access object
// int result = await ExecuteNonQuery(query, parameters);
// return result > 0 ? "Success" : "false";
// }
// catch (Exception ex)
// {
// // Log the exception or handle it as needed
// return "false";
// }
//}
public async Task<int> ExecuteNonQuery(string query, MySqlParameter[] parameters)
{
try
{
await connection.OpenAsync();
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.Parameters.AddRange(parameters);
return await command.ExecuteNonQueryAsync();
}
}
catch (Exception ex)
{
// Log the exception or handle it as needed
return -1; // Return a negative value to indicate failure
}
}
public async Task<string> postDataAsync(string fmsId, Int32 weight, string date, string typee, string comment, Int32 userid, string siteID,string container_no)
{
try
{
DateTime parsedDate = DateTime.ParseExact(date, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
string convertedDate = parsedDate.ToString("yyyy-MM-ddTHH:mm");
// Ensure TLS 1.2 is used
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(5);
// Serialize the data to JSON
// Create an anonymous object to hold the data
var data = new
{
type = typee,
vehicleRequestCode = fmsId,
weight = weight,
userId = userid,
dateTime = convertedDate,
comment = comment,
siteID = siteID,
container_no = container_no
};
// Convert the data object to a JSON string
string jsonData = JsonConvert.SerializeObject(data);
// Create a StringContent object with JSON data
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// Send a POST request with the data
//var response = await client.PostAsync(POST_END_POINT_URL, content);
var response = await client.PostAsync(POST_END_POINT_URL, content);
if (response.IsSuccessStatusCode)
{
// Handle a successful response
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
string responseString = await response.Content.ReadAsStringAsync();
// Handle an unsuccessful response
return responseString;
}
}
catch (Exception ex)
{
return "false";
}
}
public async Task<VehicleRequestApiResponse> GetRegNo(string FmsID)
{
try
{
BusinessLayer businessLayer = new BusinessLayer();
// Ensure TLS 1.2 is used
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromMinutes(5);
string parameter = $"{FmsID}";
// var response = await client.GetAsync($"{GET_END_POINT_URL}{parameter}");
var response = await client.GetAsync($"{GET_END_POINT_URL}{parameter}");
string responseString = await response.Content.ReadAsStringAsync();
if (!responseString.Contains("vehicleRequest"))
{
return new VehicleRequestApiResponse
{
// Set error properties accordingly
};
}
else
{
// Deserialize the JSON response into ApiResponse object
VehicleRequestApiResponse apiResponse = JsonConvert.DeserializeObject<VehicleRequestApiResponse>(responseString);
return apiResponse;
}
}
}
catch (Exception ex)
{
return new VehicleRequestApiResponse
{
// Set error properties accordingly
};
}
}
public async Task<string> StoreWeightAgainstAPI(string qrCode, decimal weight, int trolleyId)
{
try
{
HttpClient _httpClient = new HttpClient();
var payload = new
{
code = qrCode.ToUpper(),
totalWeight = weight,
trolleyId = trolleyId
};
// Convert payload to JSON
string jsonData = JsonConvert.SerializeObject(payload);
// Create StringContent with JSON payload
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
// Send the POST request
var response = await _httpClient.PostAsync(urlDc, content); // _httpClient should be your initialized HttpClient instance
// Check the status of the response
if (response.IsSuccessStatusCode)
{
// Optionally, handle the response content
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
// Log the error or handle it in some way
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
}
catch (Exception ex)
{
// Log the exception or show a message to the user
return "Exception";
}
}
public async Task<string> GetTrolleyApi()
{
try
{
using (HttpClient _httpClient = new HttpClient())
{
// If no payload is required, you can send an empty POST request by passing an empty StringContent
var content = new StringContent(string.Empty, Encoding.UTF8, "application/json");
// Send the POST request
var response = await _httpClient.GetAsync(urlTrolley);
// Check the status of the response
if (response.IsSuccessStatusCode)
{
// Return the response content as string
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
// Handle and return the error message
string responseString = await response.Content.ReadAsStringAsync();
return $"Error: {response.StatusCode} - {responseString}";
}
}
}
catch (HttpRequestException httpEx)
{
// Handle HTTP-specific exceptions
return $"HttpRequestException: {httpEx.Message}";
}
catch (Exception ex)
{
// Handle general exceptions
return $"Exception: {ex.Message}";
}
}
public async Task<string> GetVehicleDetails(string vehicleNO)
{
try
{
// Reuse HttpClient if possible, for performance reasons
using (HttpClient _httpClient = new HttpClient())
{
// Append the vehicle number to the URL
// Send the GET request
var response = await _httpClient.GetAsync(urlGetVehicle+ vehicleNO);
// Check if the response is successful
if (response.IsSuccessStatusCode)
{
// Return the response content as string
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
else
{
// Return error details if the response is not successful
string responseString = await response.Content.ReadAsStringAsync();
return $"Error: {response.StatusCode} - {responseString}";
}
}
}
catch (HttpRequestException httpEx)
{
// Handle HTTP-specific exceptions
return $"HttpRequestException: {httpEx.Message}";
}
catch (Exception ex)
{
// Handle general exceptions
return $"Exception: {ex.Message}";
}
}
public DataTable GetWeightScaleData(string tableName)
{
DataTable dt = new DataTable();
try
{
OpenConnection();
string query = $"SELECT * FROM {tableName}";
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
da.Fill(dt);
}
// Add a "Select" option at the 0 index
DataRow newRow = dt.NewRow();
newRow[0] = 0; // Assuming the first column is an ID or similar
newRow[1] = "Select"; // Assuming the second column is the name or description
dt.Rows.InsertAt(newRow, 0); // Insert the new row at the first position (index 0)
}
}
catch (Exception ex)
{
// Handle exception (log it, rethrow it, etc.)
Console.WriteLine(ex.Message);
}
finally
{
CloseConnection();
}
return dt;
}
public void AddValueToDatabase(string newValue, string tableName, string columnName)
{
// Open the database connection
OpenConnection();
// Construct the query with dynamic table and column names
string query = $"INSERT INTO `{tableName}` (`{columnName}`) VALUES (@Value)";
try
{
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
// Add the parameter value
cmd.Parameters.AddWithValue("@Value", newValue);
// Execute the query
cmd.ExecuteNonQuery();
}
}
catch (MySqlException ex)
{
// MessageBox.Show($"Error while adding value: {ex.Message}", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
// Close the connection to avoid resource leaks
CloseConnection();
}
}
}
}