Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit ManagerAPageMain;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
- Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Grids,
- Vcl.StdCtrls;
- type
- TManagerAFrameMain = class(TFrame)
- SGShopCenter: TStringGrid;
- BtnAdd: TButton;
- BtnDelete: TButton;
- BtnEdit: TButton;
- BtnViewPavilions: TButton;
- procedure FrameEnter(Sender: TObject);
- procedure BtnAddClick(Sender: TObject);
- procedure BtnEditClick(Sender: TObject);
- procedure BtnDeleteClick(Sender: TObject);
- procedure BtnViewPavilionsClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- Function GetAmountPavilionsToDelete(ShopCenterID : Integer) : Integer;
- end;
- const
- HEADER_ID_SHOPCENTER = '№';
- HEADER_NAME = 'Название ТЦ';
- HEADER_STATUS = 'Статус';
- HEADER_AMOUNT_PAVILION = 'Кол-во павильонов';
- HEADER_COUNTRY = 'Страна';
- HEADER_TOWN = 'Город';
- HEADER_COST = 'Цена';
- HEADER_COMPLEX_COFF = 'Доб. стоимость аренды в ТЦ';
- HEADER_AMOUNT_FLOOR = 'Этажность';
- implementation
- {$R *.dfm}
- uses BidirectionalShopCenterList, ConstantsFile, Main, EntityShopCenter,
- ConstantsTitleMainFrame, BidirectionalPavilionList;
- Procedure FillHeadersSG(SGShopCenter : TStringGrid);
- begin
- SGShopCenter.Cells[0,0] := HEADER_ID_SHOPCENTER;
- SGShopCenter.Cells[1,0] := HEADER_NAME;
- SGShopCenter.Cells[2,0] := HEADER_STATUS;
- SGShopCenter.Cells[3,0] := HEADER_AMOUNT_PAVILION;
- SGShopCenter.Cells[4,0] := HEADER_COUNTRY;
- SGShopCenter.Cells[5,0] := HEADER_TOWN;
- SGShopCenter.Cells[6,0] := HEADER_COST;
- SGShopCenter.Cells[7,0] := HEADER_COMPLEX_COFF;
- SGShopCenter.Cells[8,0] := HEADER_AMOUNT_FLOOR;
- end;
- Procedure ClearStringGrid(SG : TStringGrid);
- Var
- I, J : Integer;
- Begin
- For I := 0 to SG.RowCount - 1 do
- Begin
- SG.Rows[I].Clear;
- End;
- End;
- procedure FillAllShopCenters(SG : TStringGrid);
- var
- AmountAllShopCenters : Integer;
- AmountDeletedShopCenter : Integer;
- AmountResult : Integer;
- TempList : TShopCenterList;
- I, J : Integer;
- begin
- ClearStringGrid(SG); // Предварительная очистка полей компонента TStringGrid
- FillHeadersSG(SG); // Установка заголовков компоненту TStringGrid
- I := 1;
- J := 0;
- try
- TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER); // Получение списка торговых центров из типизированного файла
- AmountAllShopCenters := TShopCenterList.GetAmountAllShopCenters(ConstantsFile.FILE_NAME_SHOPCENTER); // Получить количество торговых центров
- SG.RowCount := AmountAllShopCenters + 1;
- // Перебор списка торговых центров
- while TempList.Head <> NIL do
- begin
- SG.Cells[J, I] := TempList.Head.ShopCenter.ID_ShopCenter.ToString;
- SG.Cells[J + 1, I] := TempList.Head.ShopCenter.Name;
- SG.Cells[J + 2, I] := TempList.Head.ShopCenter.Status;
- SG.Cells[J + 3, I] := TempList.Head.ShopCenter.AmountPavilion.ToString;
- SG.Cells[J + 4, I] := TempList.Head.ShopCenter.Country;
- SG.Cells[J + 5, I] := TempList.Head.ShopCenter.Town;
- SG.Cells[J + 6, I] := TempList.Head.ShopCenter.Cost.ToString;
- SG.Cells[J + 7, I] := TempList.Head.ShopCenter.ComplexCoff.ToString;
- SG.Cells[J + 8, I] := TempList.Head.ShopCenter.AmountFloor.ToString;
- Inc(I);
- TempList.Head := TempList.Head^.Next; // Переход к следующей записи торгового центра
- end;
- finally
- TempList.Destroy; // Очистка памяти, занятой динамической структурой
- end;
- end;
- procedure TManagerAFrameMain.BtnAddClick(Sender: TObject);
- begin
- try
- with MainForm do
- begin
- LBCurrentPage.Caption := ConstantsTitleMainFrame.TITLE_SHOPCENTER_ADD_PAGE;
- ManagerAFrameMain.Visible := false;
- ManagerAFrameAddEdit.Visible := true;
- ManagerAFrameAddEdit.UpdateFrame;
- end;
- Except
- On E : EInOutError do
- begin
- Application.MessageBox('В доступе к файлу с пользователями отказано. Обратитесь к системному администратору.','Ошибка сохранения', MB_OK + MB_ICONERROR);
- Application.Terminate;
- Abort;
- end;
- On E : Exception do
- begin
- Application.MessageBox('Неизвестная ошибка. Обратитесь к системному администратору.','Ошибка сохранения', MB_OK + MB_ICONERROR);
- Application.Terminate;
- Abort;
- end;
- end;
- end;
- Procedure SendDataForActions(SG : TStringGrid; TitleMainFrame : String);
- Var
- C, R : Word;
- ShopCenterForEdit : TShopCenter;
- TempList : TShopCenterList;
- begin
- C := SG.Col;
- R := SG.Row;
- ShopCenterForEdit := TShopCenterList.GetShopCenterByPrimaryKey(SG.Cells[0,R].ToInteger, ConstantsFile.FILE_NAME_SHOPCENTER);
- TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER);
- if ShopCenterForEdit <> NIL then
- TempList.DeleteShopCenterByID(ShopCenterForEdit.ID_ShopCenter);
- with MainForm do
- begin
- ManagerAFrameMain.Visible := False;
- ManagerAFrameAddEdit.Visible := True;
- ManagerAFrameAddEdit.UpdateFrameForEdit(ShopCenterForEdit);
- Main.MainForm.LBCurrentPage.Caption := TitleMainFrame;
- end;
- end;
- Function TManagerAFrameMain.GetAmountPavilionsToDelete(ShopCenterID : Integer) : Integer;
- var
- TempList : TPavilionList;
- AmountPavilionsToDelete : Integer;
- begin
- try
- AmountPavilionsToDelete := 0;
- TempList := TPavilionList.GetPavilionListFromFile(ConstantsFile.FILE_NAME_PAVILION);
- while TempList.Head <> NIL do
- begin
- if TempList.Head^.Pavilion.ShopCenterID = ShopCenterID then
- begin
- Inc(AmountPavilionsToDelete);
- end;
- TempList.Head := TempList.Head^.Next;
- end;
- GetAmountPavilionsToDelete := AmountPavilionsToDelete;
- finally
- TempList.Destroy;
- end;
- end;
- procedure TManagerAFrameMain.BtnDeleteClick(Sender: TObject);
- var
- C, R : Word;
- TempList : TShopCenterList;
- ShopCenterForDelete : TShopCenter;
- PavilionList : TPavilionList;
- AmountPavilions : Integer;
- begin
- PavilionList := NIL;
- try
- if SGShopCenter.RowCount - 1 <> 0 then
- begin
- C := SGShopCenter.Col;
- R := SGShopCenter.Row;
- try
- TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER); // Получение списка торговых центров
- ShopCenterForDelete := TShopCenterList.GetShopCenterByPrimaryKey(SGShopCenter.Cells[0,R].ToInteger, ConstantsFile.FILE_NAME_SHOPCENTER); // Получение торгового центра к удалению из типизированного файла по уникальному ключу
- AmountPavilions := GetAmountPavilionsToDelete(ShopCenterForDelete.ID_ShopCenter); // Получение количества павильонов к удалению
- PavilionList := TPavilionList.GetPavilionListFromFile(ConstantsFile.FILE_NAME_PAVILION); // Получение списка павильонов
- if Application.MessageBox(PCHAR(Concat('Вы уверены что хотите удалить ТЦ "',ShopCenterForDelete.Name, '", страна - ', ShopCenterForDelete.Country ,', город - ', ShopCenterForDelete.Town,'?',#13#10'Вместе с торговым центром будут удалены павильоны, добавленные в него! Кол-во павильонов - ', AmountPavilions.ToString)),'Удаление торгового центра',MB_YESNO + MB_ICONQUESTION) = IDYES then
- begin
- // Удаление павильонов, выбранного торгового центра
- while PavilionList.Head <> NIL do
- begin
- if (PavilionList.Head^.Pavilion.ShopCenterID = ShopCenterForDelete.ID_ShopCenter) then // Если первичный ключ выбранного ТЦ, совпадает со вторинчным ключом в павильоне
- PavilionList.DeletePavilionByID(PavilionList.Head^.Pavilion.ID_Pavilion); // Удаление павильона по уникальному ключу
- PavilionList.Head := PavilionList.Head^.Next; // Переход к следующей записи
- end;
- PavilionList.SavePavilionList(ConstantsFile.FILE_NAME_PAVILION); // Сохранение обновленного списка павильонов
- TempList.DeleteShopCenterByID(ShopCenterForDelete.ID_ShopCenter); // Удаление торгового центра по уникальному ключу
- TempList.SaveShopCenterList(ConstantsFile.FILE_NAME_SHOPCENTER); // Сохранение обновленного списка торговых центров
- Self.FrameEnter(NIL); // Обновление компонента TStringGrid на главной странице Менеджера А
- end;
- finally
- // Очистка памяти, занятой динамической структурой
- TempList.Destroy;
- end;
- end
- else
- begin
- Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ.','Удаление невозможно',MB_OK+MB_ICONERROR);
- Abort;
- end;
- except
- On E : EInOutError do
- begin
- Application.MessageBox('В доступе к файлу с павильонами отказано. Обратитесь к системному администратору.','Ошибка удаления', MB_OK + MB_ICONERROR);
- Application.Terminate;
- Abort;
- end;
- On E : EConvertError do
- begin
- Application.MessageBox('Выберите ТЦ','Удаление невозможно',MB_OK+MB_ICONERROR);
- Abort;
- end;
- On E : EIntError do
- begin
- Application.MessageBox('Выберите ТЦ','Удаление невозможно',MB_OK+MB_ICONERROR);
- Abort;
- end;
- end;
- end;
- procedure TManagerAFrameMain.BtnEditClick(Sender: TObject);
- begin
- try
- if SGShopCenter.RowCount - 1 <> 0 then
- SendDataForActions(SGShopCenter, ConstantsTitleMainFrame.TITLE_SHOPCENTER_EDIT_PAGE)
- else
- Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ.','Редактирование невозможно',MB_OK+MB_ICONERROR);
- except
- On E : EInOutError do
- begin
- Application.MessageBox('В доступе к файлу с торговыми центрами отказано. Обратитесь к системному администратору.','Ошибка редактирования', MB_OK + MB_ICONERROR);
- Application.Terminate;
- Abort;
- end;
- On E : EConvertError do
- begin
- Application.MessageBox('Выберите ТЦ','Редактирование невозможно',MB_OK+MB_ICONERROR);
- Abort;
- end;
- On E : EIntError do
- begin
- Application.MessageBox('Выберите ТЦ','Редактирование невозможно',MB_OK+MB_ICONERROR);
- Abort;
- end;
- end;
- end;
- procedure TManagerAFrameMain.BtnViewPavilionsClick(Sender: TObject);
- Var
- C, R : Word;
- CurrentShopCenter : TShopCenter;
- begin
- try
- if SGShopCenter.RowCount - 1 <> 0 then
- begin
- // ID передать ТЦ
- R := SGShopCenter.Row;
- With Main.MainForm do
- begin
- PavilionFrameMain.LBPKShopCenter.Caption := SGShopCenter.Cells[0,R];
- PavilionFrameMain.FrameEnter(NIL);
- LBCurrentPage.Caption := ConstantsTitleMainFrame.TITLE_PAVILION_MAIN;
- ManagerAFrameMain.Visible := False;
- PavilionFrameMain.Visible := True;
- end;
- end
- else
- begin
- Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ','Просмотр павильонов невозможен',MB_OK + MB_ICONERROR);
- end;
- Except
- On E : EInOutError do
- begin
- Application.MessageBox(PCHAR('Ошибка доступа к файлу c павильонами. Обратитесь к системному администратору.'),'Ошибка открытия списка павильонов',MB_OK + MB_ICONWARNING);
- Application.Terminate;
- Abort;
- end;
- On E : EIntError do
- begin
- Application.MessageBox('Выберите ТЦ','Просмотр невозможен',MB_OK+MB_ICONERROR);
- Abort;
- end;
- On E : EConvertError do
- begin
- Application.MessageBox('Выберите ТЦ','Просмотр невозможен',MB_OK+MB_ICONERROR);
- Abort;
- end;
- On E : Exception do
- begin
- Application.MessageBox(PCHAR('Неизвестная ошибка, передайте ее системному администратору: ' + E.Message),'Ошибка',MB_OK + MB_ICONWARNING);
- Application.Terminate;
- Abort;
- end;
- end;
- end;
- procedure TManagerAFrameMain.FrameEnter(Sender: TObject);
- begin
- try
- FillAllShopCenters(SGShopCenter);
- except
- On E : EInOutError do
- begin
- Application.MessageBox(PCHAR('Ошибка доступа к файлу c торговым центром. Обратитесь к системному администратору.'),'Завершение работы программы',MB_OK + MB_ICONWARNING);
- Application.Terminate;
- Abort;
- end;
- On E : Exception do
- begin
- Application.MessageBox(PCHAR('Неизвестная ошибка, передайте ее системному администратору: ' + E.Message),'Завершение работы программы',MB_OK + MB_ICONWARNING);
- Application.Terminate;
- Abort;
- end;
- end;
- end;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement