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.
362 lines
15 KiB
362 lines
15 KiB
3 months ago
|
using BiskLog_Point_Of_Sale.Cashier_Module;
|
||
|
using BiskLog_Point_Of_Sale.Classes;
|
||
|
using BiskLog_Point_Of_Sale.Company_Setup;
|
||
|
using BiskLog_Point_Of_Sale.Customer;
|
||
|
using BiskLog_Point_Of_Sale.Delivery;
|
||
|
using BiskLog_Point_Of_Sale.POSDialogs;
|
||
|
using BiskLog_Point_Of_Sale.Properties;
|
||
|
using Point_Of_Sale_Managment;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Data;
|
||
|
using System.Data.SqlClient;
|
||
|
using System.Drawing;
|
||
|
using System.Linq;
|
||
|
using System.Text;
|
||
|
using System.Threading.Tasks;
|
||
|
using System.Windows.Forms;
|
||
|
|
||
|
namespace BiskLog_Point_Of_Sale
|
||
|
{
|
||
|
public partial class Customers : Form
|
||
|
{
|
||
|
SqlConnection cn;
|
||
|
SqlCommand cm;
|
||
|
SqlDataReader dr;
|
||
|
SqlTransaction tn;
|
||
|
DatabaseConn conn = new DatabaseConn();
|
||
|
string firstnameC, surnameC, selectedID, currency;
|
||
|
Form1 form;
|
||
|
CashierMain cashier;
|
||
|
decimal figure = 0;
|
||
|
|
||
|
public Customers(Form1 form = null, CashierMain cashier = null)
|
||
|
{
|
||
|
InitializeComponent();
|
||
|
cn = new SqlConnection(conn.MyConnection());
|
||
|
holding.Left = (ClientSize.Width - holding.Width) / 2;
|
||
|
panelHo.Left = (panel14.Width - panelHo.Width) / 2;
|
||
|
panelHo.Top = (panel14.Height - panelHo.Height) / 2;
|
||
|
currency = Settings.Default.currrencyCode + " ";
|
||
|
if (form != null)
|
||
|
{
|
||
|
this.form = form;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this.cashier = cashier;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void Button1_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
AddCustomer addCustomer = new AddCustomer(this);
|
||
|
addCustomer.BringToFront();
|
||
|
addCustomer.ShowDialog();
|
||
|
}
|
||
|
|
||
|
private void BtnEdit_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
List<string> details = new List<string>();
|
||
|
details.Add(lblCustomerID.Text);
|
||
|
details.Add(firstnameC);
|
||
|
details.Add(surnameC);
|
||
|
details.Add(customerAddress.Text);
|
||
|
details.Add(customerEmail.Text);
|
||
|
details.Add(customerPhone.Text);
|
||
|
details.Add(lbltaxID.Text);
|
||
|
AddCustomer addCustomer = new AddCustomer(this, true, details);
|
||
|
addCustomer.BringToFront();
|
||
|
addCustomer.ShowDialog();
|
||
|
}
|
||
|
public async void loadCustomerOutNOut()
|
||
|
{
|
||
|
Task<int> task = new Task<int>(loadCustomers);
|
||
|
holding.Visible = true;
|
||
|
task.Start();
|
||
|
await task;
|
||
|
holding.Visible = false;
|
||
|
}
|
||
|
public int loadCustomers()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
int i = 1;
|
||
|
dataGridView1.Invoke(new Action(() => dataGridView1.Rows.Clear()));
|
||
|
cn.Open();
|
||
|
cm = new SqlCommand("Select firstname,surname,address,telephone,tin,customerID,email from tblCustomers where status = @status and branchID = @branchID" +
|
||
|
" and (Firstname like '%" + searchBox.Text + "%' or Surname like '%" + searchBox.Text + "%' or customerID like '%" + searchBox.Text + "%')", cn);
|
||
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
||
|
cm.Parameters.AddWithValue("@status", "ACTIVE");
|
||
|
cm.ExecuteNonQuery();
|
||
|
dr = cm.ExecuteReader();
|
||
|
while (dr.Read())
|
||
|
{
|
||
|
dataGridView1.Invoke(new Action(() => dataGridView1.Rows.Add(i, dr[0].ToString().ToUpper() + " " + dr[1].ToString().ToUpper(),
|
||
|
dr[2].ToString().ToUpper(), dr[3].ToString(), dr[4].ToString(), dr[5].ToString(), dr[6].ToString(), dr[0].ToString().ToUpper(),
|
||
|
dr[1].ToString().ToUpper())));
|
||
|
i++;
|
||
|
}
|
||
|
dr.Close();
|
||
|
cn.Close();
|
||
|
dataGridView1.Invoke(new Action(() => dataGridView1.ClearSelection()));
|
||
|
return 1;
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
cn.Close();
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
public int loadBal()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
balText.Invoke(new Action(() =>
|
||
|
{
|
||
|
cn.Open();
|
||
|
cm = new SqlCommand("Select top(1) balance from CustomerAccounts where branchID = @branchID and customerID = @customer " +
|
||
|
"order by date desc", cn);
|
||
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
||
|
cm.Parameters.AddWithValue("@customer", selectedID);
|
||
|
cm.ExecuteNonQuery();
|
||
|
dr = cm.ExecuteReader();
|
||
|
dr.Read();
|
||
|
if (dr.HasRows)
|
||
|
{
|
||
|
figure = decimal.Parse(dr[0].ToString());
|
||
|
balText.Text = "Account Balance : " + currency + figure;
|
||
|
if (figure < 0)
|
||
|
{
|
||
|
balText.ForeColor = Color.Crimson;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
balText.ForeColor = Color.DarkGreen;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
balText.Text = "Account Balance : " + currency + "00.00";
|
||
|
balText.ForeColor = Color.DarkGreen;
|
||
|
figure = 0;
|
||
|
}
|
||
|
dr.Close();
|
||
|
cn.Close();
|
||
|
}));
|
||
|
return 1;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
ErrorLogging.WriteToFile(ex.ToString());
|
||
|
cn.Close();
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private async void Customers_Load(object sender, EventArgs e)
|
||
|
{
|
||
|
Task<int> task = new Task<int>(loadCustomers);
|
||
|
holding.Visible = true;
|
||
|
task.Start();
|
||
|
await task;
|
||
|
holding.Visible = false;
|
||
|
}
|
||
|
|
||
|
private async void SearchBox_TextChanged(object sender, EventArgs e)
|
||
|
{
|
||
|
Task<int> task = new Task<int>(loadCustomers);
|
||
|
holding.Visible = true;
|
||
|
task.Start();
|
||
|
await task;
|
||
|
holding.Visible = false;
|
||
|
}
|
||
|
|
||
|
private void Sell_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
CustomerClass customer = new CustomerClass();
|
||
|
customer.firstname = lblName.Text;
|
||
|
customer.id = lblCustomerID.Text;
|
||
|
customer.address = customerAddress.Text;
|
||
|
customer.email = customerEmail.Text;
|
||
|
customer.telephone = customerPhone.Text;
|
||
|
if (form != null)
|
||
|
{
|
||
|
form.MoveTOPOS(customer);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cashier.POS(customer: customer);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private async void magicButton1_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
AccountPayment accountPayment = new AccountPayment(figure);
|
||
|
accountPayment.BringToFront();
|
||
|
accountPayment.ShowDialog();
|
||
|
if (accountPayment.DialogResult == DialogResult.OK && accountPayment.deposit)
|
||
|
{
|
||
|
decimal deposit = accountPayment.payment;
|
||
|
decimal balance = figure;
|
||
|
Task<int> task = new Task<int>(() => beginDeposit(deposit, balance));
|
||
|
task.Start();
|
||
|
int result = await task;
|
||
|
if (result == 1)
|
||
|
{
|
||
|
Task<int> task1 = new Task<int>(loadBal);
|
||
|
task1.Start();
|
||
|
await task1;
|
||
|
}
|
||
|
}else if(accountPayment.DialogResult == DialogResult.OK && accountPayment.withdrawal)
|
||
|
{
|
||
|
decimal withdraw = accountPayment.payment;
|
||
|
Task<int> task = new Task<int>(() => beginWithdrawal(withdraw));
|
||
|
task.Start();
|
||
|
int result = await task;
|
||
|
if (result == 1)
|
||
|
{
|
||
|
Task<int> task1 = new Task<int>(loadBal);
|
||
|
task1.Start();
|
||
|
await task1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
private void customerHistory_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
CustomerHistory customer = new CustomerHistory(lblCustomerID.Text);
|
||
|
customer.BringToFront();
|
||
|
customer.ShowDialog();
|
||
|
}
|
||
|
private void schDelivery_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
CustomerClass person = new CustomerClass();
|
||
|
person.firstname = firstnameC.ToUpper();
|
||
|
person.surname = surnameC.ToUpper();
|
||
|
person.address = customerAddress.Text;
|
||
|
person.id = lblCustomerID.Text;
|
||
|
person.email = customerEmail.Text;
|
||
|
person.telephone = customerPhone.Text;
|
||
|
NewDelivery delivery = new NewDelivery(person);
|
||
|
delivery.BringToFront();
|
||
|
delivery.ShowDialog();
|
||
|
}
|
||
|
public int beginDeposit(decimal depositAmt, decimal currentBal)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
cn.Open();
|
||
|
SortedList<string, decimal> receiptList = new SortedList<string, decimal>();
|
||
|
SqlDataReader dr;
|
||
|
SqlCommand cm;
|
||
|
cm = new SqlCommand("Select receiptID,(totalBill - paid) as remaining from CreditPurchases where status = @status and " +
|
||
|
"customerID = @customerID and branchID = @branchID", cn);
|
||
|
cm.Parameters.AddWithValue("@customerID", selectedID);
|
||
|
cm.Parameters.AddWithValue("@status", "unsettled");
|
||
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
||
|
cm.ExecuteNonQuery();
|
||
|
dr = cm.ExecuteReader();
|
||
|
while (dr.Read())
|
||
|
{
|
||
|
string receiptID = dr[0].ToString();
|
||
|
decimal remaining1 = decimal.Parse(dr[1].ToString());
|
||
|
receiptList.Add(receiptID, remaining1);
|
||
|
}
|
||
|
dr.Close();
|
||
|
|
||
|
tn = cn.BeginTransaction();
|
||
|
|
||
|
cm = new SqlCommand("Declare @total decimal(19,2) = Case when (Select SUM(debit - credit) from CustomerAccounts where branchID = @branchID " +
|
||
|
"and customerID = @customerID) is null then 0 else (Select SUM(debit - credit) from CustomerAccounts where branchID = @branchID and customerID = @customerID) end " +
|
||
|
"set @total = (@total + @debit) - @credit " +
|
||
|
"Insert into CustomerAccounts(customerID, transactionID, date, debit, credit, balance, comments, branchID, countID) " +
|
||
|
"Values(@customerID, @transactionID, @date, @debit, @credit, @total, @comments, @branchID, @countID)", cn, tn);
|
||
|
cm.Parameters.AddWithValue("@customerID", selectedID);
|
||
|
cm.Parameters.AddWithValue("@transactionID", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
|
||
|
cm.Parameters.AddWithValue("@date", DateTime.Now);
|
||
|
cm.Parameters.AddWithValue("@debit", depositAmt);
|
||
|
cm.Parameters.AddWithValue("@credit", 0);
|
||
|
cm.Parameters.AddWithValue("@comments", "Payment to account");
|
||
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
||
|
cm.Parameters.AddWithValue("@countID", MainLogin.login_user + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
|
||
|
cm.ExecuteNonQuery();
|
||
|
|
||
|
if (depositAmt + currentBal > 0)
|
||
|
PreviousSettlement.settlement(cn, selectedID, depositAmt + currentBal, receiptList, tn);
|
||
|
|
||
|
tn.Commit();
|
||
|
cn.Close();
|
||
|
return 1;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
ErrorLogging.WriteToFile(ex.ToString());
|
||
|
cn.Close();
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
public int beginWithdrawal(decimal WithdrawAmt)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
cn.Open();
|
||
|
SortedList<string, decimal> receiptList = new SortedList<string, decimal>();
|
||
|
SqlDataReader dr;
|
||
|
SqlCommand cm;
|
||
|
tn = cn.BeginTransaction();
|
||
|
cm = new SqlCommand("Declare @total decimal(19,2) = Case when (Select SUM(debit - credit) from CustomerAccounts where branchID = @branchID " +
|
||
|
"and customerID = @customerID) is null then 0 else (Select SUM(debit - credit) from CustomerAccounts where branchID = @branchID and customerID = @customerID) end " +
|
||
|
"set @total = (@total + @debit) - @credit " +
|
||
|
"Insert into CustomerAccounts(customerID, transactionID, date, debit, credit, balance, comments, branchID, countID) " +
|
||
|
"Values(@customerID, @transactionID, @date, @debit, @credit, @total, @comments, @branchID, @countID)", cn, tn);
|
||
|
cm.Parameters.AddWithValue("@customerID", selectedID);
|
||
|
cm.Parameters.AddWithValue("@transactionID", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
|
||
|
cm.Parameters.AddWithValue("@date", DateTime.Now);
|
||
|
cm.Parameters.AddWithValue("@debit", 0);
|
||
|
cm.Parameters.AddWithValue("@credit", WithdrawAmt);
|
||
|
cm.Parameters.AddWithValue("@comments", "Payment to customer");
|
||
|
cm.Parameters.AddWithValue("@branchID", Settings.Default.BranchID);
|
||
|
cm.Parameters.AddWithValue("@countID", MainLogin.login_user + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
|
||
|
cm.ExecuteNonQuery();
|
||
|
tn.Commit();
|
||
|
cn.Close();
|
||
|
return 1;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
ErrorLogging.WriteToFile(ex.ToString());
|
||
|
cn.Close();
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
private async void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
|
||
|
{
|
||
|
if (e.RowIndex != -1)
|
||
|
{
|
||
|
lblName.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
|
||
|
customerAddress.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
|
||
|
customerPhone.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
|
||
|
lblCustomerID.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();
|
||
|
lbltaxID.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();
|
||
|
customerEmail.Text = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString();
|
||
|
firstnameC = dataGridView1.Rows[e.RowIndex].Cells[7].Value.ToString();
|
||
|
surnameC = dataGridView1.Rows[e.RowIndex].Cells[8].Value.ToString();
|
||
|
selectedID = lblCustomerID.Text;
|
||
|
sell.Visible = true;
|
||
|
btnEdit.Visible = true;
|
||
|
customerHistory.Visible = true;
|
||
|
paymentBTN.Visible = true;
|
||
|
if (form != null)
|
||
|
{
|
||
|
// schDelivery.Visible = true;
|
||
|
}
|
||
|
Task<int> task = new Task<int>(loadBal);
|
||
|
task.Start();
|
||
|
await task;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|