Advertisement
Matixs

Untitled

May 5th, 2023
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 15.19 KB | None | 0 0
  1. unit ManagerAPageMain;
  2.  
  3. interface
  4. uses
  5.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  6.   Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.Grids,
  7.   Vcl.StdCtrls;
  8.  
  9. type
  10.   TManagerAFrameMain = class(TFrame)
  11.     SGShopCenter: TStringGrid;
  12.     BtnAdd: TButton;
  13.     BtnDelete: TButton;
  14.     BtnEdit: TButton;
  15.     BtnViewPavilions: TButton;
  16.     procedure FrameEnter(Sender: TObject);
  17.     procedure BtnAddClick(Sender: TObject);
  18.     procedure BtnEditClick(Sender: TObject);
  19.     procedure BtnDeleteClick(Sender: TObject);
  20.     procedure BtnViewPavilionsClick(Sender: TObject);
  21.   private
  22.     { Private declarations }
  23.   public
  24.     { Public declarations }
  25.     Function GetAmountPavilionsToDelete(ShopCenterID : Integer) : Integer;
  26.   end;
  27.  
  28. const
  29.     HEADER_ID_SHOPCENTER = '№';
  30.     HEADER_NAME = 'Название ТЦ';
  31.     HEADER_STATUS = 'Статус';
  32.     HEADER_AMOUNT_PAVILION = 'Кол-во павильонов';
  33.     HEADER_COUNTRY = 'Страна';
  34.     HEADER_TOWN = 'Город';
  35.     HEADER_COST =  'Цена';
  36.     HEADER_COMPLEX_COFF = 'Доб. стоимость аренды в ТЦ';
  37.     HEADER_AMOUNT_FLOOR = 'Этажность';
  38.  
  39.  
  40. implementation
  41.  
  42. {$R *.dfm}
  43.  
  44. uses BidirectionalShopCenterList, ConstantsFile, Main, EntityShopCenter,
  45.   ConstantsTitleMainFrame, BidirectionalPavilionList;
  46.  
  47. Procedure FillHeadersSG(SGShopCenter : TStringGrid);
  48. begin
  49.     SGShopCenter.Cells[0,0] := HEADER_ID_SHOPCENTER;
  50.     SGShopCenter.Cells[1,0] := HEADER_NAME;
  51.     SGShopCenter.Cells[2,0] := HEADER_STATUS;
  52.     SGShopCenter.Cells[3,0] := HEADER_AMOUNT_PAVILION;
  53.     SGShopCenter.Cells[4,0] := HEADER_COUNTRY;
  54.     SGShopCenter.Cells[5,0] := HEADER_TOWN;
  55.     SGShopCenter.Cells[6,0] := HEADER_COST;
  56.     SGShopCenter.Cells[7,0] := HEADER_COMPLEX_COFF;
  57.     SGShopCenter.Cells[8,0] := HEADER_AMOUNT_FLOOR;
  58. end;
  59.  
  60. Procedure ClearStringGrid(SG : TStringGrid);
  61. Var
  62.     I, J : Integer;
  63. Begin
  64.     For I := 0 to SG.RowCount - 1 do
  65.     Begin
  66.         SG.Rows[I].Clear;
  67.     End;
  68. End;
  69.  
  70. procedure FillAllShopCenters(SG : TStringGrid);
  71. var
  72.     AmountAllShopCenters : Integer;
  73.     AmountDeletedShopCenter : Integer;
  74.     AmountResult : Integer;
  75.     TempList : TShopCenterList;
  76.     I, J : Integer;
  77. begin
  78.     ClearStringGrid(SG); // Предварительная очистка полей компонента TStringGrid
  79.     FillHeadersSG(SG); // Установка заголовков компоненту TStringGrid
  80.  
  81.     I := 1;
  82.     J := 0;
  83.     try
  84.         TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER); // Получение списка торговых центров из типизированного файла
  85.  
  86.         AmountAllShopCenters := TShopCenterList.GetAmountAllShopCenters(ConstantsFile.FILE_NAME_SHOPCENTER); // Получить количество торговых центров
  87.  
  88.         SG.RowCount := AmountAllShopCenters + 1;
  89.  
  90.         // Перебор списка торговых центров
  91.         while TempList.Head <> NIL do
  92.         begin
  93.             SG.Cells[J, I] := TempList.Head.ShopCenter.ID_ShopCenter.ToString;
  94.             SG.Cells[J + 1, I] := TempList.Head.ShopCenter.Name;
  95.             SG.Cells[J + 2, I] := TempList.Head.ShopCenter.Status;
  96.             SG.Cells[J + 3, I] := TempList.Head.ShopCenter.AmountPavilion.ToString;
  97.             SG.Cells[J + 4, I] := TempList.Head.ShopCenter.Country;
  98.             SG.Cells[J + 5, I] := TempList.Head.ShopCenter.Town;
  99.             SG.Cells[J + 6, I] := TempList.Head.ShopCenter.Cost.ToString;
  100.             SG.Cells[J + 7, I] := TempList.Head.ShopCenter.ComplexCoff.ToString;
  101.             SG.Cells[J + 8, I] := TempList.Head.ShopCenter.AmountFloor.ToString;
  102.             Inc(I);
  103.             TempList.Head := TempList.Head^.Next; // Переход к следующей записи торгового центра
  104.         end;
  105.     finally
  106.         TempList.Destroy; // Очистка памяти, занятой динамической структурой
  107.     end;
  108. end;
  109.  
  110. procedure TManagerAFrameMain.BtnAddClick(Sender: TObject);
  111. begin
  112.     try
  113.         with MainForm do
  114.         begin
  115.             LBCurrentPage.Caption := ConstantsTitleMainFrame.TITLE_SHOPCENTER_ADD_PAGE;
  116.             ManagerAFrameMain.Visible := false;
  117.             ManagerAFrameAddEdit.Visible := true;
  118.             ManagerAFrameAddEdit.UpdateFrame;
  119.         end;
  120.     Except
  121.         On E : EInOutError do
  122.         begin
  123.             Application.MessageBox('В доступе к файлу с пользователями отказано. Обратитесь к системному администратору.','Ошибка сохранения', MB_OK + MB_ICONERROR);
  124.             Application.Terminate;
  125.             Abort;
  126.         end;
  127.         On E : Exception do
  128.         begin
  129.             Application.MessageBox('Неизвестная ошибка. Обратитесь к системному администратору.','Ошибка сохранения', MB_OK + MB_ICONERROR);
  130.             Application.Terminate;
  131.             Abort;
  132.         end;
  133.     end;
  134. end;
  135.  
  136. Procedure SendDataForActions(SG : TStringGrid; TitleMainFrame : String);
  137. Var
  138.     C, R : Word;
  139.     ShopCenterForEdit : TShopCenter;
  140.     TempList : TShopCenterList;
  141. begin
  142.     C := SG.Col;
  143.     R := SG.Row;
  144.  
  145.    ShopCenterForEdit := TShopCenterList.GetShopCenterByPrimaryKey(SG.Cells[0,R].ToInteger, ConstantsFile.FILE_NAME_SHOPCENTER);
  146.    TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER);
  147.  
  148.    if ShopCenterForEdit <> NIL then
  149.       TempList.DeleteShopCenterByID(ShopCenterForEdit.ID_ShopCenter);
  150.  
  151.    with MainForm do
  152.    begin
  153.       ManagerAFrameMain.Visible := False;
  154.       ManagerAFrameAddEdit.Visible := True;
  155.       ManagerAFrameAddEdit.UpdateFrameForEdit(ShopCenterForEdit);
  156.       Main.MainForm.LBCurrentPage.Caption := TitleMainFrame;
  157.    end;
  158.  
  159. end;
  160.  
  161. Function TManagerAFrameMain.GetAmountPavilionsToDelete(ShopCenterID : Integer) : Integer;
  162. var
  163.     TempList : TPavilionList;
  164.     AmountPavilionsToDelete : Integer;
  165. begin
  166.     try
  167.         AmountPavilionsToDelete := 0;
  168.         TempList := TPavilionList.GetPavilionListFromFile(ConstantsFile.FILE_NAME_PAVILION);
  169.  
  170.  
  171.         while TempList.Head <> NIL do
  172.         begin
  173.             if TempList.Head^.Pavilion.ShopCenterID = ShopCenterID then
  174.             begin
  175.                 Inc(AmountPavilionsToDelete);
  176.             end;
  177.             TempList.Head := TempList.Head^.Next;
  178.         end;
  179.  
  180.         GetAmountPavilionsToDelete := AmountPavilionsToDelete;
  181.     finally
  182.         TempList.Destroy;
  183.     end;
  184. end;
  185.  
  186. procedure TManagerAFrameMain.BtnDeleteClick(Sender: TObject);
  187. var
  188.     C, R : Word;
  189.     TempList : TShopCenterList;
  190.     ShopCenterForDelete : TShopCenter;
  191.     PavilionList : TPavilionList;
  192.     AmountPavilions : Integer;
  193. begin
  194.     PavilionList := NIL;
  195.     try
  196.         if SGShopCenter.RowCount - 1 <> 0 then
  197.         begin
  198.             C := SGShopCenter.Col;
  199.             R := SGShopCenter.Row;
  200.             try
  201.                 TempList := TShopCenterList.GetShopCenterListFromFile(ConstantsFile.FILE_NAME_SHOPCENTER); // Получение списка торговых центров
  202.                 ShopCenterForDelete := TShopCenterList.GetShopCenterByPrimaryKey(SGShopCenter.Cells[0,R].ToInteger, ConstantsFile.FILE_NAME_SHOPCENTER); // Получение торгового центра к удалению из типизированного файла по уникальному ключу
  203.                 AmountPavilions := GetAmountPavilionsToDelete(ShopCenterForDelete.ID_ShopCenter); // Получение количества павильонов к удалению
  204.                 PavilionList := TPavilionList.GetPavilionListFromFile(ConstantsFile.FILE_NAME_PAVILION); // Получение списка павильонов
  205.  
  206.  
  207.                 if Application.MessageBox(PCHAR(Concat('Вы уверены что хотите удалить ТЦ "',ShopCenterForDelete.Name, '", страна - ', ShopCenterForDelete.Country ,', город - ', ShopCenterForDelete.Town,'?',#13#10'Вместе с торговым центром будут удалены павильоны, добавленные в него! Кол-во павильонов - ', AmountPavilions.ToString)),'Удаление торгового центра',MB_YESNO + MB_ICONQUESTION) = IDYES then
  208.                 begin
  209.  
  210.                     // Удаление павильонов, выбранного торгового центра
  211.                     while PavilionList.Head <> NIL do
  212.                     begin
  213.                         if (PavilionList.Head^.Pavilion.ShopCenterID = ShopCenterForDelete.ID_ShopCenter) then // Если первичный ключ выбранного ТЦ, совпадает со вторинчным ключом в павильоне
  214.                             PavilionList.DeletePavilionByID(PavilionList.Head^.Pavilion.ID_Pavilion); // Удаление павильона по уникальному ключу
  215.                         PavilionList.Head := PavilionList.Head^.Next; // Переход к следующей записи
  216.                     end;
  217.  
  218.                     PavilionList.SavePavilionList(ConstantsFile.FILE_NAME_PAVILION); // Сохранение обновленного списка павильонов
  219.  
  220.                     TempList.DeleteShopCenterByID(ShopCenterForDelete.ID_ShopCenter); // Удаление торгового центра по уникальному ключу
  221.                     TempList.SaveShopCenterList(ConstantsFile.FILE_NAME_SHOPCENTER); // Сохранение обновленного списка торговых центров
  222.                     Self.FrameEnter(NIL); // Обновление компонента TStringGrid на главной странице Менеджера А
  223.                 end;
  224.             finally
  225.                 // Очистка памяти, занятой динамической структурой
  226.                 TempList.Destroy;
  227.             end;
  228.         end
  229.         else
  230.         begin
  231.             Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ.','Удаление невозможно',MB_OK+MB_ICONERROR);
  232.             Abort;
  233.         end;
  234.     except
  235.         On E : EInOutError do
  236.         begin
  237.             Application.MessageBox('В доступе к файлу с павильонами отказано. Обратитесь к системному администратору.','Ошибка удаления', MB_OK + MB_ICONERROR);
  238.             Application.Terminate;
  239.             Abort;
  240.         end;
  241.         On E : EConvertError do
  242.         begin
  243.             Application.MessageBox('Выберите ТЦ','Удаление невозможно',MB_OK+MB_ICONERROR);
  244.             Abort;
  245.         end;
  246.         On E : EIntError do
  247.         begin
  248.             Application.MessageBox('Выберите ТЦ','Удаление невозможно',MB_OK+MB_ICONERROR);
  249.             Abort;
  250.         end;
  251.     end;
  252.  
  253. end;
  254.  
  255. procedure TManagerAFrameMain.BtnEditClick(Sender: TObject);
  256. begin
  257.     try
  258.         if SGShopCenter.RowCount - 1 <> 0 then
  259.             SendDataForActions(SGShopCenter, ConstantsTitleMainFrame.TITLE_SHOPCENTER_EDIT_PAGE)
  260.         else
  261.             Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ.','Редактирование невозможно',MB_OK+MB_ICONERROR);
  262.  
  263.     except
  264.         On E : EInOutError do
  265.         begin
  266.             Application.MessageBox('В доступе к файлу с торговыми центрами отказано. Обратитесь к системному администратору.','Ошибка редактирования', MB_OK + MB_ICONERROR);
  267.             Application.Terminate;
  268.             Abort;
  269.         end;
  270.         On E : EConvertError do
  271.         begin
  272.             Application.MessageBox('Выберите ТЦ','Редактирование невозможно',MB_OK+MB_ICONERROR);
  273.             Abort;
  274.         end;
  275.         On E : EIntError do
  276.         begin
  277.             Application.MessageBox('Выберите ТЦ','Редактирование невозможно',MB_OK+MB_ICONERROR);
  278.             Abort;
  279.         end;
  280.     end;
  281.  
  282. end;
  283.  
  284. procedure TManagerAFrameMain.BtnViewPavilionsClick(Sender: TObject);
  285. Var
  286.     C, R : Word;
  287.     CurrentShopCenter : TShopCenter;
  288. begin
  289.     try
  290.         if SGShopCenter.RowCount - 1 <> 0 then
  291.         begin
  292.             // ID передать ТЦ
  293.             R := SGShopCenter.Row;
  294.             With Main.MainForm do
  295.             begin
  296.                 PavilionFrameMain.LBPKShopCenter.Caption := SGShopCenter.Cells[0,R];
  297.                 PavilionFrameMain.FrameEnter(NIL);
  298.                 LBCurrentPage.Caption := ConstantsTitleMainFrame.TITLE_PAVILION_MAIN;
  299.                 ManagerAFrameMain.Visible := False;
  300.                 PavilionFrameMain.Visible := True;
  301.             end;
  302.         end
  303.         else
  304.         begin
  305.             Application.MessageBox('Список ТЦ пуст. Добавьте сначала ТЦ','Просмотр павильонов невозможен',MB_OK + MB_ICONERROR);
  306.         end;
  307.     Except
  308.         On E : EInOutError do
  309.         begin
  310.             Application.MessageBox(PCHAR('Ошибка доступа к файлу c павильонами. Обратитесь к системному администратору.'),'Ошибка открытия списка павильонов',MB_OK + MB_ICONWARNING);
  311.             Application.Terminate;
  312.             Abort;
  313.         end;
  314.         On E : EIntError do
  315.         begin
  316.             Application.MessageBox('Выберите ТЦ','Просмотр невозможен',MB_OK+MB_ICONERROR);
  317.             Abort;
  318.         end;
  319.         On E : EConvertError do
  320.         begin
  321.             Application.MessageBox('Выберите ТЦ','Просмотр невозможен',MB_OK+MB_ICONERROR);
  322.             Abort;
  323.         end;
  324.         On E : Exception do
  325.         begin
  326.             Application.MessageBox(PCHAR('Неизвестная ошибка, передайте ее системному администратору: ' + E.Message),'Ошибка',MB_OK + MB_ICONWARNING);
  327.             Application.Terminate;
  328.             Abort;
  329.         end;
  330.     end;
  331. end;
  332.  
  333. procedure TManagerAFrameMain.FrameEnter(Sender: TObject);
  334. begin
  335.     try
  336.         FillAllShopCenters(SGShopCenter);
  337.     except
  338.         On E : EInOutError do
  339.         begin
  340.             Application.MessageBox(PCHAR('Ошибка доступа к файлу c торговым центром. Обратитесь к системному администратору.'),'Завершение работы программы',MB_OK + MB_ICONWARNING);
  341.             Application.Terminate;
  342.             Abort;
  343.         end;
  344.         On E : Exception do
  345.         begin
  346.             Application.MessageBox(PCHAR('Неизвестная ошибка, передайте ее системному администратору: ' + E.Message),'Завершение работы программы',MB_OK + MB_ICONWARNING);
  347.             Application.Terminate;
  348.             Abort;
  349.         end;
  350.     end;
  351. end;
  352.  
  353. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement