1147 lines
42 KiB
C#
1147 lines
42 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.Entity;
|
|
using System.Data.SQLite;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace AVS
|
|
{
|
|
class LiteDbClass
|
|
{
|
|
public string SERVER_URL = "https://cosmos.utopiadeals.com/cosmos/webhook/article-verification-log";
|
|
//public string SERVER_URL = "https://cosmos-jobs.utopiadeals.com/cosmos/webhook/article-verification-log";
|
|
|
|
//public string SERVER_URL = "http://192.168.91.54:8080/cosmos/webhook/article-verification-log";
|
|
public string SERVER_URL_CARTON = "https://cosmos.utopiadeals.com/cosmos/rest/carton-verification-logs";
|
|
|
|
private MainForm _mainForm;
|
|
|
|
// Constructor that accepts MainForm instance
|
|
public LiteDbClass(MainForm mainForm)
|
|
{
|
|
_mainForm = mainForm;
|
|
}
|
|
|
|
// Specify the folder path for the SQLite database file
|
|
static string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), "AVS");
|
|
// Specify the path for the SQLite database file within the folder
|
|
static string dbFileName = "AVS.db";
|
|
static string dbPath = Path.Combine(folderPath, dbFileName);
|
|
private static string connectionString = $"Data Source={dbPath};Version=3;";
|
|
SQLiteConnection connection = new SQLiteConnection(connectionString);
|
|
public SQLiteConnection OpenConnection()
|
|
{
|
|
try
|
|
{
|
|
// Open the SQLite connection
|
|
|
|
connection.Open();
|
|
Console.WriteLine("SQLite connection opened successfully");
|
|
return connection;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error opening SQLite connection: {ex.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void CloseConnection()
|
|
{
|
|
try
|
|
{
|
|
// Close the SQLite connection
|
|
connection?.Close();
|
|
Console.WriteLine("SQLite connection closed successfully");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error closing SQLite connection: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
public void UpdateSKURecord(string tableName, string oldSKU, string newSKU)
|
|
{
|
|
try
|
|
{
|
|
|
|
//if (!RecordExists(tableName,newSKU,null))
|
|
//{
|
|
OpenConnection();
|
|
|
|
// Create the SQL command for update
|
|
string updateCommand = $"UPDATE {tableName} SET SKU = @NewSKU WHERE SKU = @OldSKU";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(updateCommand, connection))
|
|
{
|
|
// Set the parameters for the old and new SKUs
|
|
cmd.Parameters.AddWithValue("@OldSKU", oldSKU);
|
|
cmd.Parameters.AddWithValue("@NewSKU", newSKU);
|
|
|
|
// Execute the command
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
CloseConnection();
|
|
|
|
Console.WriteLine("SKU updated successfully");
|
|
// }
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error updating SKU: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public void InsertRecord<T>(string tableName, T record, string property, string property2)
|
|
{
|
|
try
|
|
{
|
|
string PropValue1 = "";
|
|
string PropValue2 = "";
|
|
|
|
PropertyInfo[] properties = typeof(T).GetProperties();
|
|
foreach (PropertyInfo prop in properties)
|
|
{
|
|
if (prop.Name == property)
|
|
{
|
|
PropValue1 = prop.GetValue(record).ToString();
|
|
}
|
|
if (prop.Name == property2)
|
|
{
|
|
PropValue2 = prop.GetValue(record).ToString();
|
|
}
|
|
}
|
|
if (tableName == "DailyLogs")
|
|
{
|
|
OpenConnection();
|
|
// Create the SQL command for insertion
|
|
|
|
|
|
// Generate column names and parameter names dynamically
|
|
string columnNames = string.Join(", ", properties.Select(prop => prop.Name));
|
|
string parameterNames = string.Join(", ", properties.Select(prop => $"@{prop.Name}"));
|
|
|
|
string insertCommand = $"INSERT INTO {tableName} ({columnNames}) VALUES ({parameterNames})";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(insertCommand, connection))
|
|
{
|
|
// Set the parameters based on the record properties
|
|
foreach (PropertyInfo prop in properties)
|
|
{
|
|
cmd.Parameters.AddWithValue($"@{prop.Name}", prop.GetValue(record));
|
|
}
|
|
|
|
// Execute the command
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
CloseConnection();
|
|
|
|
Console.WriteLine("Record inserted successfully");
|
|
}
|
|
else
|
|
{
|
|
if (!RecordExists(tableName, (property, PropValue1), (property2, PropValue2)))
|
|
{
|
|
OpenConnection();
|
|
// Create the SQL command for insertion
|
|
|
|
|
|
// Generate column names and parameter names dynamically
|
|
string columnNames = string.Join(", ", properties.Select(prop => prop.Name));
|
|
string parameterNames = string.Join(", ", properties.Select(prop => $"@{prop.Name}"));
|
|
|
|
string insertCommand = $"INSERT INTO {tableName} ({columnNames}) VALUES ({parameterNames})";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(insertCommand, connection))
|
|
{
|
|
// Set the parameters based on the record properties
|
|
foreach (PropertyInfo prop in properties)
|
|
{
|
|
cmd.Parameters.AddWithValue($"@{prop.Name}", prop.GetValue(record));
|
|
}
|
|
|
|
// Execute the command
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
CloseConnection();
|
|
|
|
Console.WriteLine("Record inserted successfully");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error inserting record: {ex.Message}");
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
private bool RecordExists(string tableName, params (string PropertyName, object PropertyValue)[] properties)
|
|
{
|
|
try
|
|
{
|
|
string whereClause = null;
|
|
// Parameter Validation
|
|
if (string.IsNullOrEmpty(tableName) || properties == null || properties.Length == 0)
|
|
{
|
|
throw new ArgumentNullException("tableName, record, or properties", "Table name, record, and at least one property must be provided.");
|
|
}
|
|
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Generate the WHERE clause based on the provided properties
|
|
|
|
if (properties[1].PropertyName != null)
|
|
{
|
|
whereClause = string.Join(" AND ", properties
|
|
.Where(p => p.PropertyName != null)
|
|
.Select(p => $"{p.PropertyName} = @{p.PropertyName}"));
|
|
|
|
}
|
|
else
|
|
{
|
|
whereClause = string.Join("", properties
|
|
.Where(p => p.PropertyName != null)
|
|
.Select(p => $"{p.PropertyName} = @{p.PropertyName}"));
|
|
}
|
|
|
|
// Check if the combination of properties exists in the table
|
|
|
|
string query = $"SELECT COUNT(*) FROM {tableName} WHERE {whereClause}";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection))
|
|
{
|
|
foreach (var property in properties)
|
|
{
|
|
if (property.PropertyName != null)
|
|
{
|
|
cmd.Parameters.Add(new SQLiteParameter($"@{property.PropertyName}", property.PropertyValue));
|
|
}
|
|
}
|
|
|
|
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
|
return count > 0;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error checking existence: {ex.Message}");
|
|
throw; // Rethrow the exception or return false, depending on your design
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"General error in SKUExists method: {ex.Message}");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool CheckSkuRunning(string sku, string tableName)
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Check if SKU exists in the table
|
|
string query = $"SELECT COUNT(*) FROM {tableName} WHERE FNSKU = @FNSKU ";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection))
|
|
{
|
|
cmd.Parameters.AddWithValue("@FNSKU", sku);
|
|
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
|
return count > 0;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error checking SKU existence: {ex.Message}");
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
|
|
public bool checkCarton(string model_no, string QR)
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Check if SKU exists in the table
|
|
string query = $"SELECT * FROM MODELLogs WHERE QR = @QR and MODEL_NO = @MODEL_NO";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection))
|
|
{
|
|
cmd.Parameters.AddWithValue("@MODEL_NO", model_no);
|
|
cmd.Parameters.AddWithValue("@QR", QR);
|
|
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
|
return count > 0;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error checking SKU existence: {ex.Message}");
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public int GetLastRecord()
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Query to get the last id from the DailyLogs table
|
|
string query = "SELECT id FROM DailyLogs ORDER BY id DESC LIMIT 1;";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection))
|
|
{
|
|
// Execute the query and convert the result to an integer
|
|
int lastId = Convert.ToInt32(cmd.ExecuteScalar());
|
|
return lastId;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error retrieving the last record id: {ex.Message}");
|
|
return -1; // Return a sentinel value to indicate failure
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public bool UpdateCartonValue(string cartonValue, int lastId)
|
|
{
|
|
try
|
|
{
|
|
// Get the last record ID using the existing GetLastRecord method
|
|
|
|
OpenConnection();
|
|
|
|
// Query to update the carton_value for the last record
|
|
string query = "UPDATE DailyLogs SET WRONG_CARTON = @cartonValue WHERE id = @id;";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection))
|
|
{
|
|
// Add parameters to the query
|
|
cmd.Parameters.AddWithValue("@cartonValue", cartonValue);
|
|
cmd.Parameters.AddWithValue("@id", lastId);
|
|
|
|
// Execute the update query
|
|
int rowsAffected = cmd.ExecuteNonQuery();
|
|
|
|
return rowsAffected > 0; // Return true if the update was successful
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error updating carton value: {ex.Message}");
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public List<SKULog> showData()
|
|
{
|
|
List<SKULog> LogList = new List<SKULog>();
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
string query = "SELECT * FROM SKUlogs";
|
|
using (SQLiteCommand command = new SQLiteCommand(query, connection))
|
|
{
|
|
using (SQLiteDataReader reader = command.ExecuteReader())
|
|
{
|
|
|
|
while (reader.Read())
|
|
{
|
|
SKULog sKULog = new SKULog
|
|
{
|
|
SKU = reader["SKU"] != DBNull.Value ? reader["SKU"].ToString() : string.Empty,
|
|
FNSKU = reader["FNSKU"] != DBNull.Value ? reader["FNSKU"].ToString() : string.Empty,
|
|
SYS_IP = reader["SYS_IP"] != DBNull.Value ? reader["SYS_IP"].ToString() : string.Empty,
|
|
Title = reader["Title"] != DBNull.Value ? reader["Title"].ToString() : string.Empty,
|
|
NetWeightKg = reader["NetWeightKg"] != DBNull.Value ? Convert.ToDouble(reader["NetWeightKg"]) : 0.0,
|
|
Colour = reader["Colour"] != DBNull.Value ? reader["Colour"].ToString() : string.Empty,
|
|
ModelNo = reader["ModelNo"] != DBNull.Value ? reader["ModelNo"].ToString() : string.Empty,
|
|
Size = reader["Size"] != DBNull.Value ? reader["Size"].ToString() : string.Empty,
|
|
RECORD_DATE = reader["RECORD_DATE"] != DBNull.Value ? Convert.ToDateTime(reader["RECORD_DATE"]) : DateTime.MinValue,
|
|
USER_ID = reader["USER_ID"] != DBNull.Value ? reader["USER_ID"].ToString() : string.Empty,
|
|
ItemsPerBox = reader["ItemsPerBox"] != DBNull.Value ? Convert.ToInt32(reader["ItemsPerBox"]) : 0,
|
|
MARKET_PLACE = reader["MARKET_PLACE"] != DBNull.Value ? reader["MARKET_PLACE"].ToString() : "NA"
|
|
};
|
|
|
|
LogList.Add(sKULog);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
return LogList;
|
|
}
|
|
|
|
public void DeleteRow(string FNSKU, string market_place)
|
|
{
|
|
// Open the connection
|
|
OpenConnection();
|
|
|
|
// Define the SQL query with a parameter
|
|
string query = "DELETE FROM SKUlogs WHERE FNSKU = @fnsku AND(MARKET_PLACE = @MARKET_PLACE OR MARKET_PLACE IS NULL)";
|
|
|
|
// Use a using block to ensure resources are properly disposed
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, connection)) // Replace 'sqliteConnection' with your actual SQLiteConnection object
|
|
{
|
|
// Add the parameter to avoid SQL injection
|
|
cmd.Parameters.AddWithValue("@fnsku", FNSKU);
|
|
cmd.Parameters.AddWithValue("@MARKET_PLACE", market_place);
|
|
// Execute the query
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
// Close the connection
|
|
CloseConnection();
|
|
}
|
|
public List<MODELLog> showModelData()
|
|
{
|
|
List<MODELLog> LogList = new List<MODELLog>();
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
string query = "SELECT MODEL_NO,QR,LIVE_WEIGHT,SYS_IP,RECORD_DATE,USER_ID , PC_NAME , MARKET_PLACE FROM MODELLogs order by RECORD_DATE desc ";
|
|
using (SQLiteCommand command = new SQLiteCommand(query, connection))
|
|
{
|
|
using (SQLiteDataReader reader = command.ExecuteReader())
|
|
{
|
|
|
|
while (reader.Read())
|
|
{
|
|
MODELLog log = new MODELLog
|
|
{
|
|
//CONTAINER_NO = reader["CONTAINER_NO"].ToString(),
|
|
MODEL_NO = reader["MODEL_NO"].ToString(),
|
|
QR = reader["QR"].ToString(),
|
|
LIVE_WEIGHT = Convert.ToDecimal(reader["LIVE_WEIGHT"].ToString()),
|
|
SYS_IP = reader["SYS_IP"].ToString(),
|
|
RECORD_DATE = Convert.ToDateTime(reader["RECORD_DATE"]),
|
|
USER_ID = reader["USER_ID"].ToString(),
|
|
PC_NAME = reader["PC_NAME"].ToString(),
|
|
MARKET_PLACE = reader["MARKET_PLACE"].ToString(),
|
|
|
|
};
|
|
|
|
LogList.Add(log);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
return LogList;
|
|
}
|
|
|
|
public int FillCounts(string fnsku, string market_place)
|
|
{
|
|
int totalCount = 0;
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
string query;
|
|
|
|
if (market_place == "NA")
|
|
{
|
|
query = @"SELECT COUNT(FNSKU) AS Total_item
|
|
FROM DailyLogs
|
|
WHERE is_weight_wrong = 0
|
|
AND is_fnsku_wrong = 0
|
|
AND FNSKU = @FNSKU
|
|
AND LIVE_WEIGHT > 0.121
|
|
AND (MARKET_PLACE IS NULL OR MARKET_PLACE LIKE 'NA')";
|
|
}
|
|
else
|
|
{
|
|
query = @"SELECT COUNT(FNSKU) AS Total_item
|
|
FROM DailyLogs
|
|
WHERE is_weight_wrong = 0
|
|
AND is_fnsku_wrong = 0
|
|
AND FNSKU = @FNSKU
|
|
AND LIVE_WEIGHT > 0.121
|
|
AND MARKET_PLACE = @MARKET_PLACE";
|
|
}
|
|
using (SQLiteCommand command = new SQLiteCommand(query, connection))
|
|
{
|
|
// Add FNSKU parameter
|
|
command.Parameters.AddWithValue("@FNSKU", fnsku);
|
|
command.Parameters.AddWithValue("@MARKET_PLACE", market_place);
|
|
|
|
|
|
|
|
using (SQLiteDataReader reader = command.ExecuteReader())
|
|
{
|
|
|
|
while (reader.Read())
|
|
{
|
|
totalCount = reader.GetInt32(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
return totalCount;
|
|
|
|
}
|
|
|
|
public int FillCarton(string modelNo)
|
|
{
|
|
int totalCount = 0;
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
string query = "SELECT COUNT(MODEL_NO) AS Total_item FROM MODELLogs WHERE MODEL_NO = @MODEL_NO and LIVE_WEIGHT > 0.121";
|
|
using (SQLiteCommand command = new SQLiteCommand(query, connection))
|
|
{
|
|
// Add FNSKU parameter
|
|
command.Parameters.AddWithValue("@MODEL_NO", modelNo);
|
|
|
|
|
|
using (SQLiteDataReader reader = command.ExecuteReader())
|
|
{
|
|
|
|
while (reader.Read())
|
|
{
|
|
totalCount = reader.GetInt32(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
return totalCount;
|
|
}
|
|
|
|
public void CheckAndCreateDb()
|
|
{
|
|
try
|
|
{
|
|
// Create the folder if it doesn't exist
|
|
Directory.CreateDirectory(folderPath);
|
|
|
|
// Set the connection string with the dynamic path
|
|
connectionString = $"Data Source={dbPath};Version=3;";
|
|
|
|
// Check if the database file exists
|
|
bool isDatabaseExists = File.Exists(dbPath);
|
|
|
|
// If the database file doesn't exist, create it
|
|
if (!isDatabaseExists)
|
|
{
|
|
SQLiteConnection.CreateFile(dbPath);
|
|
Console.WriteLine("SQLite database created successfully");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error creating database: {ex.Message}");
|
|
}
|
|
|
|
}
|
|
public void CreateSKUlogTable(string tableName, List<AVS.SKULog.TableColumn> columns)
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Check if table exists
|
|
string tableExistsQuery = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
|
|
bool tableExists = false;
|
|
|
|
using (SQLiteCommand checkTableCmd = new SQLiteCommand(tableExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkTableCmd.ExecuteReader())
|
|
{
|
|
tableExists = reader.HasRows;
|
|
}
|
|
}
|
|
|
|
if (!tableExists)
|
|
{
|
|
// Create table if it does not exist
|
|
string createTableCommand = $"CREATE TABLE {tableName} ({AVS.SKULog.GetColumnsDefinition(columns)})";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(createTableCommand, connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Table '{tableName}' created.");
|
|
}
|
|
else
|
|
{
|
|
// Check for each column's existence and add it if it doesn't exist
|
|
foreach (var column in columns)
|
|
{
|
|
string columnExistsQuery = $"PRAGMA table_info({tableName})";
|
|
bool columnExists = false;
|
|
|
|
using (SQLiteCommand checkColumnCmd = new SQLiteCommand(columnExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkColumnCmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader["name"].ToString() == column.Name)
|
|
{
|
|
columnExists = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!columnExists)
|
|
{
|
|
string addColumnCommand = $"ALTER TABLE {tableName} ADD COLUMN {column.Name} {column.DataType}";
|
|
|
|
using (SQLiteCommand addColumnCmd = new SQLiteCommand(addColumnCommand, connection))
|
|
{
|
|
addColumnCmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Column '{column.Name}' added to table '{tableName}'.");
|
|
}
|
|
}
|
|
}
|
|
|
|
CloseConnection();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error creating or modifying table: {ex.Message}");
|
|
CloseConnection();
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public void CreateMODELlogTable(string tableName, List<AVS.MODELLog.TableColumn> columns)
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Check if table exists
|
|
string tableExistsQuery = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
|
|
bool tableExists = false;
|
|
|
|
using (SQLiteCommand checkTableCmd = new SQLiteCommand(tableExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkTableCmd.ExecuteReader())
|
|
{
|
|
tableExists = reader.HasRows;
|
|
}
|
|
}
|
|
|
|
if (!tableExists)
|
|
{
|
|
// Create table if it does not exist
|
|
string createTableCommand = $"CREATE TABLE {tableName} ({AVS.MODELLog.GetColumnsDefinition(columns)})";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(createTableCommand, connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Table '{tableName}' created.");
|
|
}
|
|
else
|
|
{
|
|
// Check for each column's existence and add it if it doesn't exist
|
|
foreach (var column in columns)
|
|
{
|
|
string columnExistsQuery = $"PRAGMA table_info({tableName})";
|
|
bool columnExists = false;
|
|
|
|
using (SQLiteCommand checkColumnCmd = new SQLiteCommand(columnExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkColumnCmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader["name"].ToString() == column.Name)
|
|
{
|
|
columnExists = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!columnExists)
|
|
{
|
|
string addColumnCommand = $"ALTER TABLE {tableName} ADD COLUMN {column.Name} {column.DataType}";
|
|
|
|
using (SQLiteCommand addColumnCmd = new SQLiteCommand(addColumnCommand, connection))
|
|
{
|
|
addColumnCmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Column '{column.Name}' added to table '{tableName}'.");
|
|
}
|
|
}
|
|
}
|
|
|
|
CloseConnection();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error creating or modifying table: {ex.Message}");
|
|
CloseConnection();
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
public void CreateDailylogTable(string tableName, List<AVS.DailyLog.TableColumn> columns)
|
|
{
|
|
try
|
|
{
|
|
OpenConnection();
|
|
|
|
// Check if table exists
|
|
string tableExistsQuery = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
|
|
bool tableExists = false;
|
|
|
|
using (SQLiteCommand checkTableCmd = new SQLiteCommand(tableExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkTableCmd.ExecuteReader())
|
|
{
|
|
tableExists = reader.HasRows;
|
|
}
|
|
}
|
|
|
|
if (!tableExists)
|
|
{
|
|
// Create table if it does not exist
|
|
string createTableCommand = $"CREATE TABLE {tableName} ({AVS.DailyLog.GetColumnsDefinition(columns)})";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(createTableCommand, connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Table '{tableName}' created.");
|
|
}
|
|
else
|
|
{
|
|
// Check for each column's existence and add it if it doesn't exist
|
|
foreach (var column in columns)
|
|
{
|
|
string columnExistsQuery = $"PRAGMA table_info({tableName})";
|
|
bool columnExists = false;
|
|
|
|
using (SQLiteCommand checkColumnCmd = new SQLiteCommand(columnExistsQuery, connection))
|
|
{
|
|
using (SQLiteDataReader reader = checkColumnCmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
if (reader["name"].ToString() == column.Name)
|
|
{
|
|
columnExists = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!columnExists)
|
|
{
|
|
string addColumnCommand = $"ALTER TABLE {tableName} ADD COLUMN {column.Name} {column.DataType}";
|
|
|
|
using (SQLiteCommand addColumnCmd = new SQLiteCommand(addColumnCommand, connection))
|
|
{
|
|
addColumnCmd.ExecuteNonQuery();
|
|
}
|
|
|
|
Console.WriteLine($"Column '{column.Name}' added to table '{tableName}'.");
|
|
}
|
|
}
|
|
}
|
|
|
|
CloseConnection();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error creating or modifying table: {ex.Message}");
|
|
CloseConnection();
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
|
|
|
|
public async Task<List<MODELLog>> GetAllLogsFromDatabaseAsyncCarton()
|
|
{
|
|
List<MODELLog> logs = new List<MODELLog>();
|
|
|
|
try
|
|
{
|
|
using (var command = new SQLiteCommand("SELECT * FROM MODELLogs", connection))
|
|
{
|
|
using (var reader = await command.ExecuteReaderAsync())
|
|
{
|
|
while (await reader.ReadAsync())
|
|
{
|
|
var log = new MODELLog
|
|
{
|
|
QR = reader["QR"] is DBNull ? null : reader["QR"].ToString(),
|
|
RECORD_DATE = reader["RECORD_DATE"] is DBNull ? DateTime.MinValue : DateTime.Parse(reader["RECORD_DATE"].ToString()),
|
|
SYS_IP = reader["SYS_IP"] is DBNull ? null : reader["SYS_IP"].ToString(),
|
|
USER_ID = reader["USER_ID"] is DBNull ? null : reader["USER_ID"].ToString(),
|
|
LIVE_WEIGHT = reader["LIVE_WEIGHT"] is DBNull ? 0 : Convert.ToDecimal(reader["LIVE_WEIGHT"].ToString()),
|
|
MODEL_NO = reader["MODEL_NO"] is DBNull ? "0" : reader["MODEL_NO"].ToString(),
|
|
PC_NAME = reader["PC_NAME"] is DBNull ? "PC NAME NOT FOUND" : reader["PC_NAME"].ToString(),
|
|
MARKET_PLACE = reader["MARKET_PLACE"] is DBNull ? "NA" : reader["MARKET_PLACE"].ToString(),
|
|
|
|
|
|
};
|
|
|
|
logs.Add(log);
|
|
}
|
|
}
|
|
}
|
|
|
|
return logs;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Handle exceptions, log them, or rethrow if needed.
|
|
Console.WriteLine($"Error in GetAllLogsFromDatabaseAsync: {ex.Message}");
|
|
throw;
|
|
}
|
|
}
|
|
public async Task<List<DailyLog>> GetAllLogsFromDatabaseAsync()
|
|
{
|
|
List<DailyLog> logs = new List<DailyLog>();
|
|
|
|
try
|
|
{
|
|
using (var command = new SQLiteCommand("SELECT * FROM DailyLogs", connection))
|
|
{
|
|
using (var reader = await command.ExecuteReaderAsync())
|
|
{
|
|
while (await reader.ReadAsync())
|
|
{
|
|
var log = new DailyLog
|
|
{
|
|
FNSKU = reader["FNSKU"] is DBNull ? null : reader["FNSKU"].ToString(),
|
|
RECORD_DATE = reader["RECORD_DATE"] is DBNull ? DateTime.MinValue : DateTime.Parse(reader["RECORD_DATE"].ToString()),
|
|
SYS_IP = reader["SYS_IP"] is DBNull ? null : reader["SYS_IP"].ToString(),
|
|
USER_ID = reader["USER_ID"] is DBNull ? null : reader["USER_ID"].ToString(),
|
|
LIVE_WEIGHT = reader["LIVE_WEIGHT"] is DBNull ? 0 : Convert.ToDecimal(reader["LIVE_WEIGHT"].ToString()),
|
|
WRONG_FNSKU = reader["WRONG_FNSKU"] is DBNull ? null : reader["WRONG_FNSKU"].ToString(),
|
|
IS_WEIGHT_WRONG = reader["IS_WEIGHT_WRONG"] is DBNull ? false : Convert.ToBoolean(reader["IS_WEIGHT_WRONG"]),
|
|
IS_FNSKU_WRONG = reader["IS_FNSKU_WRONG"] is DBNull ? false : Convert.ToBoolean(reader["IS_FNSKU_WRONG"]),
|
|
NET_WEIGHT = reader["NET_WEIGHT"] is DBNull ? 0 : Convert.ToDecimal(reader["NET_WEIGHT"].ToString()),
|
|
MODEL_NO = reader["MODEL_NO"] is DBNull ? "0" : reader["MODEL_NO"].ToString(),
|
|
WRONG_CARTON = reader["WRONG_CARTON"] is DBNull ? null : reader["WRONG_CARTON"].ToString(),
|
|
MARKET_PLACE = reader["MARKET_PLACE"] != DBNull.Value ? reader["MARKET_PLACE"].ToString() : "NA",
|
|
PC_NAME = reader["PC_NAME"] is DBNull ? null : reader["PC_NAME"].ToString(),
|
|
};
|
|
|
|
logs.Add(log);
|
|
}
|
|
}
|
|
}
|
|
|
|
return logs;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Handle exceptions, log them, or rethrow if needed.
|
|
Console.WriteLine($"Error in GetAllLogsFromDatabaseAsync: {ex.Message}");
|
|
throw;
|
|
}
|
|
}
|
|
public string ConvertLogsToJson(List<DailyLog> logs)
|
|
{
|
|
var jsonLogs = logs.Select(log => new
|
|
{
|
|
log.FNSKU,
|
|
log.RECORD_DATE,
|
|
log.SYS_IP,
|
|
log.USER_ID,
|
|
log.LIVE_WEIGHT,
|
|
log.WRONG_FNSKU,
|
|
log.IS_WEIGHT_WRONG,
|
|
log.IS_FNSKU_WRONG,
|
|
log.NET_WEIGHT,
|
|
log.MODEL_NO,
|
|
log.WRONG_CARTON,
|
|
log.MARKET_PLACE,
|
|
log.PC_NAME
|
|
});
|
|
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(jsonLogs, Newtonsoft.Json.Formatting.Indented);
|
|
}
|
|
public string ConvertLogsToJsonCarton(List<MODELLog> logs)
|
|
{
|
|
var jsonLogs = logs.Select(log => new
|
|
{
|
|
log.MODEL_NO,
|
|
log.QR,
|
|
log.RECORD_DATE,
|
|
log.SYS_IP,
|
|
log.USER_ID,
|
|
log.LIVE_WEIGHT,
|
|
log.PC_NAME,
|
|
log.MARKET_PLACE
|
|
|
|
});
|
|
|
|
return Newtonsoft.Json.JsonConvert.SerializeObject(jsonLogs, Newtonsoft.Json.Formatting.Indented);
|
|
}
|
|
|
|
|
|
public void DeleteAllLogsFromDatabase()
|
|
{
|
|
|
|
OpenConnection();
|
|
using (var transaction = connection.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
using (var command = new SQLiteCommand("DELETE FROM DailyLogs", connection))
|
|
{
|
|
command.ExecuteNonQuery();
|
|
}
|
|
|
|
transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
CloseConnection();
|
|
// Handle the exception, e.g., log it or throw a custom exception
|
|
Console.WriteLine($"Error deleting logs: {ex.Message}");
|
|
transaction.Rollback();
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
}
|
|
public void DeleteAllLogsFromDatabaseCarton()
|
|
{
|
|
|
|
OpenConnection();
|
|
using (var transaction = connection.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
using (var command = new SQLiteCommand("DELETE FROM MODELLogs", connection))
|
|
{
|
|
command.ExecuteNonQuery();
|
|
}
|
|
|
|
transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
CloseConnection();
|
|
// Handle the exception, e.g., log it or throw a custom exception
|
|
Console.WriteLine($"Error deleting logs: {ex.Message}");
|
|
transaction.Rollback();
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
CloseConnection();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public async void postDataAsync()
|
|
{
|
|
HttpClient client = new HttpClient();
|
|
client.Timeout = TimeSpan.FromMinutes(5);
|
|
|
|
OpenConnection();
|
|
|
|
try
|
|
{
|
|
List<DailyLog> logs = await GetAllLogsFromDatabaseAsync();
|
|
|
|
if (logs.Count > 0)
|
|
{
|
|
CloseConnection();
|
|
string jsonData = ConvertLogsToJson(logs);
|
|
|
|
// 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(SERVER_URL, content);
|
|
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
// Handle a successful response
|
|
string responseString = await response.Content.ReadAsStringAsync();
|
|
DeleteAllLogsFromDatabase();
|
|
|
|
|
|
MessageBox.Show("DATA POSTED SUCCESSFULLY ! ");
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("ERROR POSTING DATA ! ");
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("NO DATA FOUND ! ");
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
}
|
|
catch (HttpRequestException ex)
|
|
{
|
|
// Handle exception indicating server is down or unreachable
|
|
MessageBox.Show($"Error: {ex.Message}");
|
|
|
|
}
|
|
}
|
|
|
|
public async void postDataAsyncCarton()
|
|
{
|
|
HttpClient client = new HttpClient();
|
|
client.Timeout = TimeSpan.FromMinutes(5);
|
|
|
|
OpenConnection();
|
|
|
|
try
|
|
{
|
|
List<MODELLog> logs = await GetAllLogsFromDatabaseAsyncCarton();
|
|
|
|
if (logs.Count > 0)
|
|
{
|
|
CloseConnection();
|
|
string jsonData = ConvertLogsToJsonCarton(logs);
|
|
|
|
// 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(SERVER_URL_CARTON, content);
|
|
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
// Handle a successful response
|
|
string responseString = await response.Content.ReadAsStringAsync();
|
|
DeleteAllLogsFromDatabaseCarton();
|
|
|
|
|
|
MessageBox.Show("DATA POSTED SUCCESSFULLY ! ");
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("ERROR POSTING DATA ! " + response.StatusCode );
|
|
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("NO DATA FOUND ! ");
|
|
_mainForm.btn_post_data.Enabled = true;
|
|
}
|
|
}
|
|
catch (HttpRequestException ex)
|
|
{
|
|
// Handle exception indicating server is down or unreachable
|
|
MessageBox.Show($"Error: {ex.Message}");
|
|
|
|
}
|
|
}
|
|
}
|
|
} |