using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.OleDb;
using System.Data;
using Mercat_1.Empreses;
using Mercat_1.PdfCreator;
using System.Diagnostics;
namespace Mercat_1
{
///
/// Lógica de interacción para Window1.xaml
///
public partial class Window1 : Window
{
#region ViewModel
sealed class ViewModel
: INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
void SetField(ref X field, X value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(field, value)) return;
field = value;
var h = PropertyChanged;
if (h != null) h(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
// Autocombobox Default settings
//public IReadOnlyList Items
//{
// get { return PersonModule.All; }
//}
Empresa selectedItem;
public Empresa SelectedItem
{
get { return selectedItem; }
set { SetField(ref selectedItem, value); }
}
long? selectedValue;
public long? SelectedValue
{
get { return selectedValue; }
set { SetField(ref selectedValue, value); }
}
}
#endregion
public Window1()
{
InitializeComponent();
if (!FillComboBox())
{
DialogResult = false;
}
}
#region Fillcombobox
public bool FillComboBox()
{
bool success = true;
try
{
DataTable dt = new DataTable();
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\source\\Mercat-1\\Mercatflor.accdb;Persist Security Info=True"))
{
using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM empreses", connection))
{
da.Fill(dt);
}
}
//select new Empresa(Convert.ToUInt32(dr["Id"]), dr["Empresa"].ToString())).ToList();
IReadOnlyList empresesList = (from DataRow dr in dt.Rows
select new Empresa(Convert.ToUInt32(dr["Id"]), Convert.ToUInt32(dr["numClient"]), dr["Empresa"].ToString())).ToList();
llistaEmpreses.ItemsSource = empresesList;
}
catch (System.Data.OleDb.OleDbException oleError)
{
DisplayOleDbErrorCollection(oleError);
success = false;
}
catch (Exception ex)
{
MessageBox.Show(string.Format("{0} Exception caught.", ex), "ERROR");
success = false;
}
return success;
}
public void DisplayOleDbErrorCollection(OleDbException exception)
{
for (int i = 0; i < exception.Errors.Count; i++)
{
MessageBox.Show("Index #" + i + "\n" +
"Message: " + exception.Errors[i].Message + "\n" +
"Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
"Source: " + exception.Errors[i].Source + "\n" +
"SQL: " + exception.Errors[i].SQLState + "\n");
}
}
#endregion
public Thickness DocumentMargin
{
get { return (Thickness)DataContext; }
set { DataContext = value; }
}
private void cancelButton_Click(object sender, RoutedEventArgs e)
{
// Dialog box canceled
DialogResult = false;
}
private void okButton_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(llistaEmpreses.Text.ToString()))
{
MessageBox.Show("El nombre de empresa esta vacio o no es correcto", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error);
}
bool saveresult = SaveDatatoDB();
MypdfApp rere = new MypdfApp();
SendToPrinter();
string myMsg = "Combobox.Text: " + llistaEmpreses.Text + "\n" + string.Format("SelectedItem: {0} \n SelectedValue: {1}",llistaEmpreses.SelectedItem, llistaEmpreses.SelectedValue);
MessageBoxResult result = MessageBox.Show(myMsg, "Resultados", MessageBoxButton.YesNoCancel);
// Dialog box accepted
//DialogResult = true;
}
private void SendToPrinter()
{
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.FileName = @"E:\\source\\Mercat-1\\demo.pdf";
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process p = new Process();
p.StartInfo = info;
p.Start();
p.WaitForInputIdle();
System.Threading.Thread.Sleep(3000);
if (false == p.CloseMainWindow())
p.Kill();
}
#region SaveFormData
private bool SaveDatatoDB()
{
bool success = true;
/*
* llistaempreses - Combobox amb el nom de l'empresa
* data - Data de l'operació
* entrada_dc / sortida_dc - Entrades i sortides de carros DC
* entrada_cc / sortida_cc - Entrades i sortides de carros CC+
* entrada_tag5 / sortida_tag5 - Entrades i sortides de carros Tag5
* entrada_safates / sortida_safates - Entrades i sortides de Safates
* entrada_alsacurta / sortida_alsacurta - Entrades i sortides de alces curtes
* entrada_alsallarga / sortida_alsallarga - Entrades i sortides de alces llargues
* Observacions - observacions de l'entrada
*/
try
{
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\source\\Mercat-1\\Mercatflor.accdb;Persist Security Info=True"))
{
// Insertamos los datos del formulario en la tabla 'moviments' de la base de datos
connection.Open();
string queryInsertMovement = "INSERT INTO moviments (data, numClient, entrada_dc, entrada_cc, entrada_tag5, entrada_safates, entrada_alsacurta, entrada_alsallarga, observacions, sortida_dc, sortida_cc, sortida_tag5, sortida_safates, sortida_alsacurta, sortida_alsallarga)" +
" VALUES (@Data, '" + llistaEmpreses.SelectedValue.ToString() + "'," + entrada_dc.Text.ToString() + "," + entrada_cc.Text.ToString() + "," + entrada_tag5.Text.ToString() + "," +
entrada_safates.Text.ToString() + "," + entrada_alsacurta.Text.ToString() + "," + entrada_alsallarga.Text.ToString() + ",'" + Observacions.Text.ToString() + "'," +
sortida_dc.Text.ToString() + "," + sortida_cc.Text.ToString() + "," + sortida_tag5.Text.ToString() + "," + sortida_safates.Text.ToString() + "," +
sortida_alsacurta.Text.ToString() + "," + sortida_alsallarga.Text.ToString() + ")";
using (OleDbCommand cmd = new OleDbCommand(queryInsertMovement, connection))
{
cmd.Parameters.Add("@Data", OleDbType.Date).Value = data.SelectedDate.Value.Date;
try
{
cmd.ExecuteNonQuery();
}
catch (InvalidOperationException inv)
{
MessageBox.Show(string.Format("{0} ", inv), "ERROR");
}
}
// Buscamos en la tabla 'sumatori' si el cliente tiene registros
bool hasRecords = false;
bool canContinue = true;
int dbId = 0;
Int64 dbNumClient = (Int64)llistaEmpreses.SelectedValue;
int dbTotalDC = Int32.Parse(entrada_dc.Text) - Int32.Parse(sortida_dc.Text);
int dbTotalCC = Int32.Parse(entrada_cc.Text) - Int32.Parse(sortida_cc.Text);
int dbTotalTag = Int32.Parse(entrada_tag5.Text) - Int32.Parse(sortida_tag5.Text);
int dbTotalSafates = Int32.Parse(entrada_safates.Text) - Int32.Parse(sortida_safates.Text);
int dbTotalAlsaCurta = Int32.Parse(entrada_alsacurta.Text) - Int32.Parse(sortida_alsacurta.Text);
int dbTotalAlsaLlarga = Int32.Parse(entrada_alsallarga.Text) - Int32.Parse(sortida_alsallarga.Text);
string dbObservacions = string.Empty;
DateTime dbDataActualit;
string finalSqlQuery = string.Empty;
string queryBuscarCliente = string.Format("SELECT * FROM sumatori WHERE numClient = {0}", llistaEmpreses.SelectedValue);
using (OleDbDataAdapter da = new OleDbDataAdapter(queryBuscarCliente, connection))
{
try
{
DataTable dt = new DataTable();
da.Fill(dt);
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
dbId = dr.Field("Id");
dbNumClient = dr.Field("numClient");
dbDataActualit = dr.Field("data_actualitzacio");
dbTotalDC += dr.Field("total_dc");
dbTotalCC += dr.Field("total_cc");
dbTotalTag += dr.Field("total_tag5");
dbTotalSafates += dr.Field("total_safates");
dbTotalAlsaCurta += dr.Field("total_alsacurta");
dbTotalAlsaLlarga += dr.Field("total_alsallarga");
dbObservacions = dr.Field("observacions");
hasRecords = true;
//break;
}
}
else
{
canContinue = false;
}
}
catch (InvalidOperationException inv)
{
MessageBox.Show(string.Format("{0} ", inv), "ERROR");
canContinue = false;
}
}
if (canContinue)
{
dbDataActualit = DateTime.Now;
// si Observacions.text.lenght == 0 llavors "" sino afegim
if (Observacions.Text.Length > 0) { dbObservacions += dbDataActualit.ToString() + " -> " + Observacions.Text + "\n"; };
if (hasRecords)
{
// Update records
//dbObservacions += dbDataActualit.ToString() + " -> " + Observacions.Text + "\n";
finalSqlQuery = "UPDATE sumatori SET data_actualitzacio = '" + dbDataActualit.ToString() + "', total_dc = " + dbTotalDC.ToString() + ", total_cc = " + dbTotalCC.ToString() +
", total_tag5 = " + dbTotalTag.ToString() + ", total_safates = " + dbTotalSafates.ToString() + ", total_alsacurta = " + dbTotalAlsaCurta.ToString() +
", total_alsallarga = " + dbTotalAlsaLlarga.ToString() + ",observacions = '" + dbObservacions + "' WHERE numClient = " + llistaEmpreses.SelectedValue.ToString();
}
else
{
// Insert records
//dbObservacions = dbDataActualit.ToString() + " -> " + Observacions.Text + "\n";
finalSqlQuery = "INSERT INTO sumatori (numClient, data_actualitzacio, total_dc, total_cc, total_tag5, total_safates, total_alsacurta, total_alsallarga, observacions)" +
" VALUES ('" + llistaEmpreses.SelectedValue.ToString() + "','" + dbDataActualit.ToString() + "'," + dbTotalDC.ToString() + "," + dbTotalCC.ToString() + "," +
dbTotalTag.ToString() + "," + dbTotalSafates.ToString() + "," + dbTotalAlsaCurta.ToString() + "," + dbTotalAlsaLlarga.ToString() + ",'" +
dbObservacions + "')";
}
using (OleDbCommand cmd = new OleDbCommand(finalSqlQuery, connection))
{
//cmd.Parameters.Add("@Data", OleDbType.Date).Value = dbDataActualit.ToString();
try
{
cmd.ExecuteNonQuery();
}
catch (InvalidOperationException inv)
{
MessageBox.Show(string.Format("{0} ", inv), "ERROR");
}
}
}
else
{
// ERROR
MessageBoxResult result = MessageBox.Show("Ha ocurrido un error mientras se obtenia datos de la base de datos.", "ERROR", MessageBoxButton.OK, MessageBoxImage.Error );
success = false;
}
//
connection.Close();
}
}
catch (System.Data.OleDb.OleDbException oleError)
{
DisplayOleDbErrorCollection(oleError);
success = false;
}
catch (Exception ex)
{
MessageBox.Show(string.Format("{0} Exception caught.", ex), "ERROR");
success = false;
}
return success;
}
#endregion
}
}