Загрузка данных
// МОДУЛЬ 3 (форма2)
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Imaging.jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
void TfrmMain::LoadProducts()
{
String sql = "SELECT * FROM Products p "
"JOIN Categories c ON p.Category_ID = c.Category_ID "
"JOIN Manufacturers m ON p.Manufacturer_ID = m.Manufacturer_ID "
"JOIN Suppliers s ON p.Supplier_ID = s.Supplier_ID WHERE 1=1 ";
if (edtSearch->Text != "")
sql += "AND (p.ProductName LIKE '%" + edtSearch->Text + "%' "
"OR p.Description LIKE '%" + edtSearch->Text + "%' "
"OR c.CategoryName LIKE '%" + edtSearch->Text + "%' "
"OR m.ManufacturerName LIKE '%" + edtSearch->Text + "%') ";
if (cmbSupplier->ItemIndex > 0)
sql += "AND s.SupplierName = '" + cmbSupplier->Text + "' ";
if (cmbSort->ItemIndex == 1) sql += "ORDER BY p.StockQuantity ASC";
else if (cmbSort->ItemIndex == 2) sql += "ORDER BY p.StockQuantity DESC";
qProducts->Close();
qProducts->SQL->Text = sql;
qProducts->Open();
}
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormShow(TObject *Sender)
{
Caption = "Список товаров - " + userFio;
TADOQuery *q = new TADOQuery(NULL);
q->Connection = frmLogin->ADOConnection1;
bool isAdmin = (userRole == 1);
bool isManager = (userRole == 2);
bool isClient = (userRole == 3);
bool isGuest = (userRole == 0);
Panel2->Visible = (isAdmin || isManager);
btnAdd->Visible = isAdmin;
btnDelete->Visible = isAdmin;
btnEdit->Visible = isAdmin;
if (isAdmin || isManager) {
cmbSupplier->Items->Clear();
cmbSupplier->Items->Add("Все поставщики");
q->SQL->Text = "SELECT SupplierName FROM Suppliers";
q->Open();
while (!q->Eof) {
cmbSupplier->Items->Add(q->Fields->Fields[0]->AsString);
q->Next();
}
q->Close();
cmbSupplier->ItemIndex = 0;
cmbSort->ItemIndex = 0;
}
delete q;
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
qProducts->Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnExitClick(TObject *Sender)
{
frmLogin->Show();
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::dbgProductsDrawColumnCell(TObject *Sender, const TRect &Rect,
int DataCol, TColumn *Column, TGridDrawState State)
{
TCanvas *c = dbgProducts->Canvas;
double disc = qProducts->FieldByName("DiscountPrice")->AsFloat;
int stock = qProducts->FieldByName("StockQuantity")->AsInteger;
if (stock == 0) c->Brush->Color = (TColor)0xFFAAAA;
else if (disc > 15) c->Brush->Color = (TColor)0x578B2E;
else c->Brush->Color = clWhite;
c->FillRect(Rect);
if (Column->FieldName == "Price" && disc > 0)
{
double p = qProducts->FieldByName("Price")->AsFloat;
c->Font->Color = clRed;
c->Font->Style = TFontStyles() << fsStrikeOut;
c->TextOut(Rect.Left + 2, Rect.Top + 2, FormatFloat("0.00", p));
c->Font->Color = clBlack;
c->Font->Style = TFontStyles();
c->TextOut(Rect.Left + 55, Rect.Top + 2, FormatFloat("0.00", p * (100 - disc) / 100));
}
else { c->Font->Color = clBlack; c->TextOut(Rect.Left + 2, Rect.Top + 2, Column->Field->AsString); }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::dbgProductsCellClick(TColumn *Column)
{
if (qProducts->IsEmpty()) return;
String photoPath = qProducts->FieldByName("PhotoPath")->AsString;
if (photoPath != "" && FileExists(photoPath))
imgProduct->Picture->LoadFromFile(photoPath);
else
imgProduct->Picture->LoadFromFile("picture.png");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::edtSearchChange(TObject *Sender)
{
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmbSortChange(TObject *Sender)
{
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmbSupplierChange(TObject *Sender)
{
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnAddClick(TObject *Sender)
{
frmEdit = new TfrmEdit(NULL);
frmEdit->isEdit = false;
frmEdit->ShowModal();
delete frmEdit;
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDeleteClick(TObject *Sender)
{
if (qProducts->IsEmpty()) return;
int id = qProducts->FieldByName("Product_ID")->AsInteger;
TADOQuery *q = new TADOQuery(NULL);
q->Connection = frmLogin->ADOConnection1;
q->SQL->Text = "SELECT COUNT(*) FROM OrderItems WHERE Product_ID = " + IntToStr(id);
q->Open();
if (q->Fields->Fields[0]->AsInteger > 0)
ShowMessage("Нельзя удалить товар, который есть в заказах!");
else if (MessageDlg("Удалить товар?", mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
{
q->Close();
q->SQL->Text = "DELETE FROM Products WHERE Product_ID = " + IntToStr(id);
q->ExecSQL();
LoadProducts();
}
q->Close();
delete q;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEditClick(TObject *Sender)
{
if (userRole != 1) return; // только администратор
if (qProducts->IsEmpty()) {
ShowMessage("Нет товара для редактирования!");
return;
}
frmEdit = new TfrmEdit(NULL);
frmEdit->isEdit = true;
frmEdit->editId = qProducts->FieldByName("Product_ID")->AsInteger;
frmEdit->ShowModal();
delete frmEdit;
LoadProducts();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnOrdersClick(TObject *Sender)
{
frmOrders = new TfrmOrders(NULL);
frmOrders->userRole = userRole;
frmOrders->ShowModal();
delete frmOrders;
}
//---------------------------------------------------------------------------
// unit2.h
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Data.DB.hpp>
#include <Data.Win.ADODB.hpp>
#include <Vcl.DBGrids.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Grids.hpp>
#include <Vcl.Imaging.pngimage.hpp>
//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published: // IDE-managed Components
TImage *imgLogo;
TButton *btnExit;
TADOQuery *qProducts;
TDataSource *dsProducts;
TDBGrid *dbgProducts;
TPanel *Panel1;
TImage *imgProduct;
TPanel *Panel2;
TEdit *edtSearch;
TComboBox *cmbSort;
TComboBox *cmbSupplier;
TButton *btnAdd;
TButton *btnDelete;
TButton *btnEdit;
TButton *btnOrders;
void __fastcall FormShow(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall btnExitClick(TObject *Sender);
void __fastcall dbgProductsDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol,
TColumn *Column, TGridDrawState State);
void __fastcall dbgProductsCellClick(TColumn *Column);
void __fastcall edtSearchChange(TObject *Sender);
void __fastcall cmbSortChange(TObject *Sender);
void __fastcall cmbSupplierChange(TObject *Sender);
void __fastcall btnAddClick(TObject *Sender);
void __fastcall btnDeleteClick(TObject *Sender);
void __fastcall btnEditClick(TObject *Sender);
void __fastcall btnOrdersClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);
int userId;
int userRole;
String userFio;
void LoadProducts();
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
// МОДУЛЬ 3 ФОРМА 3.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include "Unit1.h"
#include "Unit2.h"
#include <JPEG.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmEdit *frmEdit;
//---------------------------------------------------------------------------
__fastcall TfrmEdit::TfrmEdit(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmEdit::FormShow(TObject *Sender)
{
if (isEdit)
{
Caption = "Редактирование товара";
TADOQuery *q = new TADOQuery(NULL);
q->Connection = frmLogin->ADOConnection1;
q->SQL->Text = "SELECT * FROM Products WHERE Product_ID = " + IntToStr(editId);
q->Open();
edtName->Text = q->FieldByName("ProductName")->AsString;
memDesc->Text = q->FieldByName("Description")->AsString;
edtPrice->Text = q->FieldByName("Price")->AsString;
edtUnit->Text = q->FieldByName("Unit")->AsString;
edtStock->Text = q->FieldByName("StockQuantity")->AsString;
edtDiscount->Text = q->FieldByName("DiscountPrice")->AsString;
oldPhoto = q->FieldByName("PhotoPath")->AsString;
cmbCategory->ItemIndex = q->FieldByName("Category_ID")->AsInteger - 1;
cmbManufacturer->ItemIndex = q->FieldByName("Manufacturer_ID")->AsInteger - 1;
cmbSuppliers->ItemIndex = q->FieldByName("Supplier_ID")->AsInteger - 1;
q->Close();
delete q;
if (oldPhoto != "" && FileExists(oldPhoto))
imgPreview->Picture->LoadFromFile(oldPhoto);
}
else Caption = "Добавление товара";
}
//---------------------------------------------------------------------------
void __fastcall TfrmEdit::btnLoadPhotoClick(TObject *Sender)
{
if (OpenDialog1->Execute())
imgPreview->Picture->LoadFromFile(OpenDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TfrmEdit::btnSaveClick(TObject *Sender)
{
if (edtId->Text == "") { ShowMessage("Введите ID товара!"); return; }
if (edtName->Text == "") { ShowMessage("Введите наименование!"); return; }
if (edtPrice->Text.ToDouble() < 0) { ShowMessage("Цена не может быть отрицательной!"); return; }
if (edtStock->Text.ToInt() < 0) { ShowMessage("Количество не может быть отрицательным!"); return; }
int id = edtId->Text.ToInt();
int catId = cmbCategory->ItemIndex + 1;
int manId = cmbManufacturer->ItemIndex + 1;
int supId = cmbSuppliers->ItemIndex + 1;
String photoPath = oldPhoto;
// сохранение картинки
if (OpenDialog1->FileName != "")
{
if (oldPhoto != "" && FileExists(oldPhoto))
DeleteFile(oldPhoto);
photoPath = ExtractFilePath(Application->ExeName) +
"img_" + IntToStr(id) + ".jpg";
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width = 300;
bmp->Height = 200;
bmp->Canvas->StretchDraw(Rect(0, 0, 300, 200), imgPreview->Picture->Graphic);
TJPEGImage *jpg = new TJPEGImage();
jpg->Assign(bmp);
jpg->SaveToFile(photoPath);
delete jpg;
delete bmp;
}
TADOQuery *q = new TADOQuery(NULL);
q->Connection = frmLogin->ADOConnection1;
try
{
if (isEdit)
{
q->SQL->Text =
"UPDATE Products SET "
"ProductName = '" + edtName->Text + "', "
"Description = '" + memDesc->Text + "', "
"Price = " + edtPrice->Text + ", "
"Unit = '" + edtUnit->Text + "', "
"StockQuantity = " + edtStock->Text + ", "
"DiscountPrice = " + edtDiscount->Text + ", "
"PhotoPath = '" + photoPath + "', "
"Category_ID = " + IntToStr(catId) + ", "
"Manufacturer_ID = " + IntToStr(manId) + ", "
"Supplier_ID = " + IntToStr(supId) +
" WHERE Product_ID = " + IntToStr(id);
}
else
{
q->SQL->Text =
"INSERT INTO Products "
"(Product_ID, Arcticle, ProductName, Price, Unit, StockQuantity, DiscountPrice, Description, PhotoPath, Category_ID, Supplier_ID, Manufacturer_ID) "
"VALUES ("
+ IntToStr(id) + ", "
"'ART" + IntToStr(id) + "', '"
+ edtName->Text + "', "
+ edtPrice->Text + ", '"
+ edtUnit->Text + "', "
+ edtStock->Text + ", "
+ edtDiscount->Text + ", '"
+ memDesc->Text + "', '"
+ photoPath + "', "
+ IntToStr(catId) + ", "
+ IntToStr(supId) + ", "
+ IntToStr(manId) + ")";
}
q->ExecSQL();
}
__finally
{
delete q;
}
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmEdit::btnCancelClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
//unit3.h
//---------------------------------------------------------------------------
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Data.DB.hpp>
#include <Data.Win.ADODB.hpp>
#include <Vcl.Dialogs.hpp>
//---------------------------------------------------------------------------
class TfrmEdit : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TEdit *edtId;
TEdit *edtName;
TComboBox *cmbCategory;
TMemo *memDesc;
TComboBox *cmbManufacturer;
TComboBox *cmbSuppliers;
TEdit *edtPrice;
TEdit *edtStock;
TEdit *edtUnit;
TEdit *edtDiscount;
TImage *imgPreview;
TButton *btnSave;
TButton *btnCancel;
TButton *btnLoadPhoto;
TOpenDialog *OpenDialog1;
TADOQuery *qEdit;
void __fastcall FormShow(TObject *Sender);
void __fastcall btnLoadPhotoClick(TObject *Sender);
void __fastcall btnSaveClick(TObject *Sender);
void __fastcall btnCancelClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TfrmEdit(TComponent* Owner);
bool isEdit;
int editId;
String oldPhoto;
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmEdit *frmEdit;
//---------------------------------------------------------------------------
#endif