Biskilog POS desktop appilcation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

336 lines
12 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using BiskLog_Point_Of_Sale.Properties;
using BiskLog_Point_Of_Sale.Multiple_Login;
using BiskLog_Point_Of_Sale.Products_Module;
using BiskLog_Point_Of_Sale.Company_Setup;
using BiskLog_Point_Of_Sale.Classes;
using BiskLog_Point_Of_Sale.CustomControls;
namespace Point_Of_Sale_Managment
{
public partial class StockForm : Form
{
SqlConnection cn;
SqlCommand cm, cm1;
DatabaseConn databasecon = new DatabaseConn();
SqlDataReader dr;
int newqty, oldqty, upqty;
string oldval, newval = "0";
string productCode, baseunitName, productName;
SqlTransaction transaction;
int total = 0;
ProductsMainHolder mainHolder;
List<ProductUnits> productUnits;
string messageRestock = "";
public StockForm(ProductsMainHolder productsMain, string code = null, string oldquantity = null, string productname = null, string baseunit = null)
{
InitializeComponent();
mainHolder = productsMain;
if (!String.IsNullOrEmpty(code))
{
productCode = code;
oldval = oldquantity;
txtRef.Text = getReference();
}
cn = new SqlConnection(databasecon.MyConnection());
holding1.Left = (ClientSize.Width - holding1.Width) / 2;
holding2.Left = (ClientSize.Width - holding2.Width) / 2;
HandleCreated += StockForm_HandleCreated;
if (!String.IsNullOrEmpty(baseunit))
baseunitName = baseunit.ToUpper();
productName = productname;
}
private void StockForm_HandleCreated(object sender, EventArgs e)
{
}
private async void StockForm_Load(object sender, EventArgs e)
{
txtIN.Text = MainLogin.login_user;
Task<int> task = new Task<int>(() =>
{
LoadProducts();
//LoadStock();
return 1;
});
holding1.Visible = true;
holding2.Visible = true;
task.Start();
await task;
lblSelectedProduct.Text = productName;
holding1.Visible = false;
holding2.Visible = false;
}
public int LoadProducts()
{
try
{
dataGridView1.Invoke(new Action(() =>
{
int i = 0;
dataGridView1.Rows.Clear();
cn.Open();
cm = new SqlCommand("EXEC usp_productList_restockForm @filter = @searchkey", cn);
cm.AddParametersWithValues("@searchkey", txtSearch.Text);
dr = cm.ExecuteReader();
while (dr.Read())
{
i++;
dataGridView1.Rows.Add(i, dr[0].ToString(), dr[1].ToString(), dr[2].ToString(), dr["BaseUnit"].ToString());
}
dr.Close();
cn.Close();
dataGridView1.ClearSelection();
}));
return 1;
}
catch
{
cn.Close();
return 0;
}
}
private async void btnSave_Click(object sender, EventArgs e)
{
holding2.Visible = true;
//if (total >= 2)
//{
Task<int> task = new Task<int>(StockUpdate);
task.Start();
int result = await task;
if (result == 1)
{
NoAction action = new NoAction("Operation Completed Successfully",
"You have successfully update the stock entry");
action.BringToFront();
action.ShowDialog();
Form1.printerDialog = null;
dataGridView1.ClearSelection();
txtRef.Text = "";
clearUnitControls();
}
else if (result == 0)
{
NoAction action = new NoAction("Operation failed", "There was an error while trying to update the stcok entry!!");
action.BringToFront();
action.ShowDialog();
Form1.printerDialog = null;
}
//}
//else
//{
// NoAction action = new NoAction("Operation denied", "To be able to restock items, you must fill all entries!!");
// action.BringToFront();
// action.ShowDialog();
// Form1.printerDialog = null;
//}
holding2.Visible = false;
}
public int StockUpdate()
{
try
{
int newstock = getQuantity();
string Messenger = "Are you sure you want to add "+ messageRestock+ " of " + lblSelectedProduct.Text + " to your inventory ?";
string heading = "Adding item";
Confirmation Confirmation = new Confirmation(message: Messenger, title: heading);
Confirmation.BringToFront();
Confirmation.ShowDialog();
if (Confirmation.DialogResult == DialogResult.Yes)
{
txtRef.Invoke(new Action(() =>
{
cn.Open();
cm = new SqlCommand("EXEC usp_restock_products @reference = @reference1,@productCode = @productCode1, @branchID = @branchID1,@quantity = @quantity1," +
"@stockdate = @stockdate1,@stockinby = @stockinby1,@countID = @countID1", cn);
cm.Parameters.AddWithValue("@reference1", txtRef.Text);
cm.Parameters.AddWithValue("@productCode1", productCode);
cm.Parameters.AddWithValue("@quantity1", newstock);
cm.Parameters.AddWithValue("@stockdate1", datePicka.Value);
cm.Parameters.AddWithValue("@stockinby1", txtIN.Text);
cm.Parameters.AddWithValue("@branchID1", Settings.Default.BranchID);
cm.Parameters.AddWithValue("@countID1", productCode + Form1.branch + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
cm.ExecuteNonQuery();
cn.Close();
lblSelectedProduct.Text = "";
LoadProducts();
}));
return 1;
}
else
{
return 2;
}
}
catch
{
cn.Close();
return 0;
}
}
public string getReference()
{
return productCode.Substring(0, 3).ToUpper() + DateTime.Now.ToString("/yyyy/MM/dd/HH/mm/ss/fff");
}
private async void txtSearch_TextChanged(object sender, EventArgs e)
{
Task<int> task = new Task<int>(LoadProducts);
holding1.Visible = true;
task.Start();
await task;
holding1.Visible = false;
}
private void TxtRef_TextChanged(object sender, EventArgs e)
{
lockSave();
}
private void TxtAdd_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 8)
{
//accepts backspace
}
else if ((e.KeyChar < 48) || (e.KeyChar > 57)) //ascii code 48-57 between 0-9
{
e.Handled = true;
}
}
private async void lblSelectedProduct_TextChanged(object sender, EventArgs e)
{
await clearUnitControls();
await getUnits();
}
private void TxtIN_TextChanged(object sender, EventArgs e)
{
lockSave();
}
public void lockSave()
{
foreach (Control box in panel5.Controls)
{
if (box is TextBox)
{
if (String.IsNullOrEmpty(box.Text))
{
total--;
btnSave.Enabled = false;
}
else
{
total++;
btnSave.Enabled = true;
}
}
}
}
//private void txtAdd_TextChanged(object sender, EventArgs e)
//{
// lockSave();
// if (!String.IsNullOrEmpty(txtAdd.Text))
// {
// newval = txtAdd.Text;
// }
//}
private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
oldval = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
productCode = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
txtRef.Text = getReference();
baseunitName = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();
lblSelectedProduct.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
}
public async Task getUnits()
{
productUnits = new List<ProductUnits>();
cn.Open();
try
{
SqlDataReader dr;
SqlCommand sqlCommand = new SqlCommand($"EXEC usp_getproduct_units @productCode = @pcode1,@branchID = @branchID1", cn);
sqlCommand.Parameters.AddWithValue("@pcode1", productCode);
sqlCommand.Parameters.AddWithValue("@branchID1", Form1.branch);
sqlCommand.ExecuteNonQuery();
dr = sqlCommand.ExecuteReader();
while (dr.Read())
{
ProductUnits productUnits = new ProductUnits
{
baseUnit = dr["baseUnit"].ToString(),
costPerUnit = decimal.Parse(dr["costPerUnit"].ToString()),
quantityPerUnit = int.Parse(dr["quantityPerUnit"].ToString()),
unitname = dr["unitname"].ToString()
};
this.productUnits.Add(productUnits);
}
cn.Close();
}
catch (Exception ex)
{
ErrorLogging.WriteToFile(ex.ToString());
cn.Close();
}
setUnitProperty(this.productUnits);
}
private async Task setUnitProperty(List<ProductUnits> units)
{
if (!String.IsNullOrEmpty(baseunitName))
{
UnitControl basecontrol = new UnitControl();
basecontrol.unitLabel.Text = baseunitName.ToUpper();
unitPanels.Controls.Add(basecontrol);
}
foreach (ProductUnits unit in units)
{
UnitControl control = new UnitControl();
control.unitLabel.Text = unit.unitname.ToUpper();
unitPanels.Controls.Add(control);
}
}
private async Task clearUnitControls()
{
unitPanels.Controls.Clear();
messageRestock = "";
}
private int getQuantity()
{
messageRestock = "";
int totalBase = 0;
foreach (Control control in unitPanels.Controls)
{
if (control is UnitControl unit)
{
string unitID = unit.unitLabel.Text;
int value = (int)unit.unitValue.Value;
if (value > 0)
messageRestock = messageRestock + $"{value} {unitID.ToLower()}(s) ";
if (unitID != baseunitName)
{
int rate = this.productUnits.Where(u => u.unitname.ToLower() == unitID.ToLower()).Select(u => u.quantityPerUnit).FirstOrDefault();
totalBase += value * rate;
}
else
{
totalBase += value;
}
}
}
return totalBase;
}
}
}