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.

281 lines
11 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;
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;
SqlTransaction transaction;
int total = 0;
ProductsMainHolder mainHolder;
public StockForm(ProductsMainHolder productsMain, string code = null, string oldquantity = 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;
}
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;
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("Select tblInventory.pcode,pdesc,tblInventory.quantity from tblProduct Inner Join tblInventory On tblInventory.pcode =" +
"tblProduct.pcode where (tblProduct.pdesc like '%" + txtSearch.Text + "%') or (tblProduct.product_name like '%" + txtSearch.Text + "%') or" +
" (tblProduct.pcode like '%" + txtSearch.Text + "%') order by tblInventory.quantity asc", cn);
dr = cm.ExecuteReader();
while (dr.Read())
{
i++;
dataGridView1.Rows.Add(i, dr[0].ToString(), dr[1].ToString(), dr[2].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 >= 3)
{
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();
txtAdd.Text = "";
txtRef.Text = "";
}
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
{
oldqty = int.Parse(oldval);
newqty = int.Parse(newval);
upqty = oldqty + newqty;
string Messenger = "Are you sure you want to add " + newqty + " items to " + productCode + " ?";
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();
transaction = cn.BeginTransaction();
cm = new SqlCommand("Insert into tbStock (refno,pcode,qty,sdate,stockinby,branchID,countID) values " +
"(@refno,@pcode,@qty,@sdate,@stockinby,@branchID,@countID)", cn);
cm.Parameters.AddWithValue("@refno", txtRef.Text);
cm.Parameters.AddWithValue("@pcode", productCode);
cm.Parameters.AddWithValue("@qty", upqty);
cm.Parameters.AddWithValue("@sdate", datePicka.Value);
cm.Parameters.AddWithValue("@stockinby", txtIN.Text);
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
cm.Parameters.AddWithValue("@countID", productCode + Form1.branch + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
cm.Transaction = transaction;
cm.ExecuteNonQuery();
cm1 = new SqlCommand("Update tblInventory set quantity = @quantity where branchID = @branchID and pcode = @pcode " +
"Insert into tblInventoryEntries(pcode, quantity, date, countID, branchID) values (@pcode,@quantity,@date,@countID,@branchID)", cn);
cm1.Parameters.AddWithValue("@pcode", productCode);
cm1.Parameters.AddWithValue("@date", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
cm1.Parameters.AddWithValue("@branchID", Form1.branch);
cm1.Parameters.AddWithValue("@countID", productCode + Form1.branch + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
cm1.Parameters.AddWithValue("@quantity", upqty);
cm1.Transaction = transaction;
cm1.ExecuteNonQuery();
transaction.Commit();
cn.Close();
LoadStock();
LoadProducts();
}));
return 1;
}
else
{
return 2;
}
}
catch
{
cn.Close();
return 0;
}
}
public int LoadStock()
{
try
{
dataGridView2.Invoke(new Action(() =>
{
int i = 0;
dataGridView2.Rows.Clear();
cn.Open();
cm = new SqlCommand("Select TOP (100) refno,tblProduct.pcode,tblProduct.product_name,tblProduct.pdesc,qty,sdate,stockinby from tbStock Inner " +
"Join tblProduct On tblProduct.pcode = tbStock.pcode where tblProduct.branchID = @branch order by sdate desc", cn);
cm.Parameters.AddWithValue("@branch", Settings.Default.BranchID);
dr = cm.ExecuteReader();
while (dr.Read())
{
i++;
dataGridView2.Rows.Add(i, dr[0].ToString(), dr[1].ToString(), dr[2].ToString(), dr[3].ToString(), dr[4].ToString(),
Convert.ToDateTime(dr[5].ToString()).ToLongDateString(), dr[6].ToString());
}
dr.Close();
cn.Close();
dataGridView2.ClearSelection();
}));
return 1;
}
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 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();
}
}
}