| [459] | 1 | unit fRemCoverSheet;
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | interface
 | 
|---|
 | 4 | 
 | 
|---|
 | 5 | uses
 | 
|---|
 | 6 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
 | 7 |   ORCtrls, StdCtrls, ExtCtrls, ComCtrls, ImgList, mImgText, Buttons, ORClasses;
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | type
 | 
|---|
 | 10 |   TRemCoverDataLevel = (dlPackage, dlSystem, dlDivision, dlService, dlLocation, dlUserClass, dlUser);
 | 
|---|
 | 11 | 
 | 
|---|
 | 12 |   TfrmRemCoverSheet = class(TForm)
 | 
|---|
 | 13 |     pnlBottom: TORAutoPanel;
 | 
|---|
 | 14 |     pnlUser: TPanel;
 | 
|---|
 | 15 |     cbxUserLoc: TORComboBox;
 | 
|---|
 | 16 |     lblRemLoc: TLabel;
 | 
|---|
 | 17 |     pnlMiddle: TPanel;
 | 
|---|
 | 18 |     lvView: TCaptionListView;
 | 
|---|
 | 19 |     pnlRight: TPanel;
 | 
|---|
 | 20 |     mlgnCat: TfraImgText;
 | 
|---|
 | 21 |     mlgnRem: TfraImgText;
 | 
|---|
 | 22 |     mlgnAdd: TfraImgText;
 | 
|---|
 | 23 |     pnlCAC: TORAutoPanel;
 | 
|---|
 | 24 |     mlgnRemove: TfraImgText;
 | 
|---|
 | 25 |     mlgnLock: TfraImgText;
 | 
|---|
 | 26 |     imgMain: TImageList;
 | 
|---|
 | 27 |     sbUp: TBitBtn;
 | 
|---|
 | 28 |     sbDown: TBitBtn;
 | 
|---|
 | 29 |     btnAdd: TBitBtn;
 | 
|---|
 | 30 |     btnRemove: TBitBtn;
 | 
|---|
 | 31 |     btnLock: TBitBtn;
 | 
|---|
 | 32 |     pnlBtns: TPanel;
 | 
|---|
 | 33 |     btnOK: TButton;
 | 
|---|
 | 34 |     btnCancel: TButton;
 | 
|---|
 | 35 |     edtSeq: TCaptionEdit;
 | 
|---|
 | 36 |     udSeq: TUpDown;
 | 
|---|
 | 37 |     lblSeq: TLabel;
 | 
|---|
 | 38 |     btnApply: TButton;
 | 
|---|
 | 39 |     cbSystem: TORCheckBox;
 | 
|---|
 | 40 |     cbDivision: TORCheckBox;
 | 
|---|
 | 41 |     cbService: TORCheckBox;
 | 
|---|
 | 42 |     cbxService: TORComboBox;
 | 
|---|
 | 43 |     cbxDivision: TORComboBox;
 | 
|---|
 | 44 |     cbLocation: TORCheckBox;
 | 
|---|
 | 45 |     cbUserClass: TORCheckBox;
 | 
|---|
 | 46 |     cbUser: TORCheckBox;
 | 
|---|
 | 47 |     cbxUser: TORComboBox;
 | 
|---|
 | 48 |     cbxClass: TORComboBox;
 | 
|---|
 | 49 |     cbxLocation: TORComboBox;
 | 
|---|
 | 50 |     lblEdit: TLabel;
 | 
|---|
 | 51 |     pnlInfo: TPanel;
 | 
|---|
 | 52 |     pnlTree: TPanel;
 | 
|---|
 | 53 |     tvAll: TORTreeView;
 | 
|---|
 | 54 |     lblTree: TLabel;
 | 
|---|
 | 55 |     pnlCover: TPanel;
 | 
|---|
 | 56 |     lvCover: TCaptionListView;
 | 
|---|
 | 57 |     pblMoveBtns: TPanel;
 | 
|---|
 | 58 |     sbCopyRight: TBitBtn;
 | 
|---|
 | 59 |     sbCopyLeft: TBitBtn;
 | 
|---|
 | 60 |     splMain: TSplitter;
 | 
|---|
 | 61 |     lblView: TLabel;
 | 
|---|
 | 62 |     lblCAC: TStaticText;
 | 
|---|
 | 63 |     btnView: TButton;
 | 
|---|
 | 64 |     lblLegend: TLabel;
 | 
|---|
 | 65 |     procedure cbxLocationNeedData(Sender: TObject; const StartFrom: String;
 | 
|---|
 | 66 |       Direction, InsertAt: Integer);
 | 
|---|
 | 67 |     procedure cbxServiceNeedData(Sender: TObject; const StartFrom: String;
 | 
|---|
 | 68 |       Direction, InsertAt: Integer);
 | 
|---|
 | 69 |     procedure cbxUserNeedData(Sender: TObject; const StartFrom: String;
 | 
|---|
 | 70 |       Direction, InsertAt: Integer);
 | 
|---|
 | 71 |     procedure cbxClassNeedData(Sender: TObject; const StartFrom: String;
 | 
|---|
 | 72 |       Direction, InsertAt: Integer);
 | 
|---|
 | 73 |     procedure FormDestroy(Sender: TObject);
 | 
|---|
 | 74 |     procedure cbxDivisionChange(Sender: TObject);
 | 
|---|
 | 75 |     procedure cbxServiceChange(Sender: TObject);
 | 
|---|
 | 76 |     procedure cbxLocationChange(Sender: TObject);
 | 
|---|
 | 77 |     procedure cbxClassChange(Sender: TObject);
 | 
|---|
 | 78 |     procedure cbxUserChange(Sender: TObject);
 | 
|---|
 | 79 |     procedure cbxDropDownClose(Sender: TObject);
 | 
|---|
 | 80 |     procedure cbEditLevelClick(Sender: TObject);
 | 
|---|
 | 81 |     procedure tvAllExpanding(Sender: TObject; Node: TTreeNode;
 | 
|---|
 | 82 |       var AllowExpansion: Boolean);
 | 
|---|
 | 83 |     procedure edtSeqChange(Sender: TObject);
 | 
|---|
 | 84 |     procedure tvAllExpanded(Sender: TObject; Node: TTreeNode);
 | 
|---|
 | 85 |     procedure tvAllChange(Sender: TObject; Node: TTreeNode);
 | 
|---|
 | 86 |     procedure lvCoverChange(Sender: TObject; Item: TListItem;
 | 
|---|
 | 87 |       Change: TItemChange);
 | 
|---|
 | 88 |     procedure btnAddClick(Sender: TObject);
 | 
|---|
 | 89 |     procedure btnRemoveClick(Sender: TObject);
 | 
|---|
 | 90 |     procedure btnLockClick(Sender: TObject);
 | 
|---|
 | 91 |     procedure lvViewColumnClick(Sender: TObject; Column: TListColumn);
 | 
|---|
 | 92 |     procedure lvCoverColumnClick(Sender: TObject; Column: TListColumn);
 | 
|---|
 | 93 |     procedure lvViewCompare(Sender: TObject; Item1, Item2: TListItem;
 | 
|---|
 | 94 |       Data: Integer; var Compare: Integer);
 | 
|---|
 | 95 |     procedure lvCoverCompare(Sender: TObject; Item1, Item2: TListItem;
 | 
|---|
 | 96 |       Data: Integer; var Compare: Integer);
 | 
|---|
 | 97 |     procedure sbUpClick(Sender: TObject);
 | 
|---|
 | 98 |     procedure sbDownClick(Sender: TObject);
 | 
|---|
 | 99 |     procedure sbCopyRightClick(Sender: TObject);
 | 
|---|
 | 100 |     procedure udSeqChangingEx(Sender: TObject; var AllowChange: Boolean;
 | 
|---|
 | 101 |       NewValue: Smallint; Direction: TUpDownDirection);
 | 
|---|
 | 102 |     procedure sbCopyLeftClick(Sender: TObject);
 | 
|---|
 | 103 |     procedure tvAllDblClick(Sender: TObject);
 | 
|---|
 | 104 |     procedure btnApplyClick(Sender: TObject);
 | 
|---|
 | 105 |     procedure btnOKClick(Sender: TObject);
 | 
|---|
 | 106 |     procedure lvCoverDblClick(Sender: TObject);
 | 
|---|
 | 107 |     procedure lvViewClick(Sender: TObject);
 | 
|---|
 | 108 |     procedure btnViewClick(Sender: TObject);
 | 
|---|
 | 109 |     procedure lvCoverKeyDown(Sender: TObject; var Key: Word;
 | 
|---|
 | 110 |       Shift: TShiftState);
 | 
|---|
 | 111 |     procedure edtSeqKeyPress(Sender: TObject; var Key: Char);
 | 
|---|
 | 112 |     procedure cbxDivisionKeyDown(Sender: TObject; var Key: Word;
 | 
|---|
 | 113 |       Shift: TShiftState);
 | 
|---|
 | 114 |   private
 | 
|---|
 | 115 |     FData: TORStringList;     // DataCode IEN ^ Modified Flag  Object=TStringList
 | 
|---|
 | 116 |     FUserInfo: TORStringList; // C^User Class, D^Division
 | 
|---|
 | 117 |     FUser: Int64;
 | 
|---|
 | 118 |     FUserMode: boolean;
 | 
|---|
 | 119 |     FInitialized: boolean;
 | 
|---|
 | 120 |     FCurDiv: Integer;
 | 
|---|
 | 121 |     FCurSer:Integer;
 | 
|---|
 | 122 |     FCurLoc: Integer;
 | 
|---|
 | 123 |     FCurClass: Integer;
 | 
|---|
 | 124 |     FCurUser: Int64;
 | 
|---|
 | 125 |     FDivisions: TORStringList;
 | 
|---|
 | 126 |     FServices: TORStringList;
 | 
|---|
 | 127 |     FLocations: TORStringList;
 | 
|---|
 | 128 |     FClasses: TORStringList;
 | 
|---|
 | 129 |     FUsers: TORStringList;
 | 
|---|
 | 130 |     FMasterList: TORStringList;
 | 
|---|
 | 131 |     FUpdatePending: TORCheckBox;
 | 
|---|
 | 132 |     FCatInfo: TORStringList;
 | 
|---|
 | 133 |     FEditingLevel: TRemCoverDataLevel;
 | 
|---|
 | 134 |     FEditingIEN: Int64;
 | 
|---|
 | 135 |     FUpdating: boolean;
 | 
|---|
 | 136 |     FTopSortTag: integer;
 | 
|---|
 | 137 |     FTopSortUp: boolean;
 | 
|---|
 | 138 |     FBottomSortTag: integer;
 | 
|---|
 | 139 |     FBottomSortUp: boolean;
 | 
|---|
 | 140 |     FDataSaved: boolean;
 | 
|---|
 | 141 |     FUpdatingView: boolean;
 | 
|---|
 | 142 |     FInternalExpansion: boolean;
 | 
|---|
 | 143 |     procedure GetUserInfo(AUser: Int64);
 | 
|---|
 | 144 |     function GetCurrent(IEN: Int64; Level: TRemCoverDataLevel; Show: boolean;
 | 
|---|
 | 145 |                         Add: boolean = FALSE): TORStringList;
 | 
|---|
 | 146 |     procedure UpdateView;
 | 
|---|
 | 147 |     procedure SetupItem(Item: TListItem; const Data: string); overload;
 | 
|---|
 | 148 |     procedure SetupItem(Item: TListItem; const Data: string;
 | 
|---|
 | 149 |                         Level: TRemCoverDataLevel; IEN: Int64); overload;
 | 
|---|
 | 150 |     function GetExternalName(Level: TRemCoverDataLevel; IEN: Int64): string;
 | 
|---|
 | 151 |     procedure UpdateMasterListView;
 | 
|---|
 | 152 |     procedure UpdateButtons;
 | 
|---|
 | 153 |     function GetCatInfo(CatIEN: string): TORStringList;
 | 
|---|
 | 154 |     procedure MarkListAsChanged;
 | 
|---|
 | 155 |     function GetIndex(List: TORStringList; Item: TListItem): integer;
 | 
|---|
 | 156 |     procedure ChangeStatus(Code: string);
 | 
|---|
 | 157 |     procedure SetSeq(Item: TListItem; const Value: string);
 | 
|---|
 | 158 |     function ListHasData(Seq: string; SubIdx: integer): boolean;
 | 
|---|
 | 159 |     procedure SaveData(FromApply: boolean);
 | 
|---|
 | 160 |     function RPad(Str: String): String;
 | 
|---|
 | 161 |     function GetCoverSheetLvlData(ALevel, AClass: string): TStrings;
 | 
|---|
 | 162 |   public
 | 
|---|
 | 163 |     procedure Init(AsUser: boolean);
 | 
|---|
 | 164 |   end;
 | 
|---|
 | 165 | 
 | 
|---|
 | 166 | procedure EditCoverSheetReminderList(AsUser: boolean);
 | 
|---|
 | 167 | 
 | 
|---|
 | 168 | implementation
 | 
|---|
 | 169 | 
 | 
|---|
 | 170 | uses rCore, uCore, uPCE, rProbs, rTIU, ORFn, rReminders, uReminders,
 | 
|---|
 | 171 |   fRemCoverPreview;
 | 
|---|
 | 172 | 
 | 
|---|
 | 173 | {$R *.DFM}
 | 
|---|
 | 174 | 
 | 
|---|
 | 175 | const
 | 
|---|
 | 176 |   DataCode: array[TRemCoverDataLevel] of string[1] =
 | 
|---|
 | 177 |       { dlPackage   } ('P',
 | 
|---|
 | 178 |       { dlSystem    }  'S',
 | 
|---|
 | 179 |       { dlDivision  }  'D',
 | 
|---|
 | 180 |       { dlService   }  'R',
 | 
|---|
 | 181 |       { dlLocation  }  'L',
 | 
|---|
 | 182 |       { dlUserClass }  'C',
 | 
|---|
 | 183 |       { dlUser      }  'U');
 | 
|---|
 | 184 | 
 | 
|---|
 | 185 |   DataName: array[TRemCoverDataLevel] of string =
 | 
|---|
 | 186 |       { dlPackage   } ('Package',
 | 
|---|
 | 187 |       { dlSystem    }  'System',
 | 
|---|
 | 188 |       { dlDivision  }  'Division',
 | 
|---|
 | 189 |       { dlService   }  'Service',
 | 
|---|
 | 190 |       { dlLocation  }  'Location',
 | 
|---|
 | 191 |       { dlUserClass }  'User Class',
 | 
|---|
 | 192 |       { dlUser      }  'User');
 | 
|---|
 | 193 | 
 | 
|---|
 | 194 |   InternalName: array[TRemCoverDataLevel] of string =
 | 
|---|
 | 195 |       { dlPackage   } ('PKG',
 | 
|---|
 | 196 |       { dlSystem    }  'SYS',
 | 
|---|
 | 197 |       { dlDivision  }  'DIV',
 | 
|---|
 | 198 |       { dlService   }  'SRV',
 | 
|---|
 | 199 |       { dlLocation  }  'LOC',
 | 
|---|
 | 200 |       { dlUserClass }  'CLASS',
 | 
|---|
 | 201 |       { dlUser      }  'USR');
 | 
|---|
 | 202 | 
 | 
|---|
 | 203 | 
 | 
|---|
 | 204 |   UserClassCode = 'C';
 | 
|---|
 | 205 |   DivisionCode = 'D';
 | 
|---|
 | 206 |   ServiceCode = 'S';
 | 
|---|
 | 207 | 
 | 
|---|
 | 208 |   CVLockCode   = 'L';
 | 
|---|
 | 209 |   CVAddCode    = 'N';
 | 
|---|
 | 210 |   CVRemoveCode = 'R';
 | 
|---|
 | 211 |   CVCatCode    = 'C';
 | 
|---|
 | 212 |   CVRemCode    = 'R';
 | 
|---|
 | 213 | 
 | 
|---|
 | 214 |   DummyNode = '^@Dummy Node@^';
 | 
|---|
 | 215 |   IdxSeq  = 0;
 | 
|---|
 | 216 |   IdxLvl  = 1;
 | 
|---|
 | 217 |   IdxType = 2;
 | 
|---|
 | 218 |   IdxTIEN = 3;
 | 
|---|
 | 219 |   IdxLvl2 = 4;
 | 
|---|
 | 220 |   IdxAdd  = 5;
 | 
|---|
 | 221 |   IdxIEN  = 6;
 | 
|---|
 | 222 | 
 | 
|---|
 | 223 | procedure EditCoverSheetReminderList(AsUser: boolean);
 | 
|---|
 | 224 | var
 | 
|---|
 | 225 |   frmRemCoverSheet: TfrmRemCoverSheet;
 | 
|---|
 | 226 | 
 | 
|---|
 | 227 | begin
 | 
|---|
 | 228 |   frmRemCoverSheet := TfrmRemCoverSheet.Create(Application);
 | 
|---|
 | 229 |   try
 | 
|---|
 | 230 |     frmRemCoverSheet.Init(AsUser);
 | 
|---|
 | 231 |     frmRemCoverSheet.ShowModal;
 | 
|---|
 | 232 |     if frmRemCoverSheet.FDataSaved then
 | 
|---|
 | 233 |       ResetReminderLoad;
 | 
|---|
 | 234 |   finally
 | 
|---|
 | 235 |     frmRemCoverSheet.Free;
 | 
|---|
 | 236 |   end;
 | 
|---|
 | 237 | end;
 | 
|---|
 | 238 | 
 | 
|---|
 | 239 | { TfrmRemCoverSheet }
 | 
|---|
 | 240 | 
 | 
|---|
 | 241 | procedure TfrmRemCoverSheet.Init(AsUser: boolean);
 | 
|---|
 | 242 | const
 | 
|---|
 | 243 |   RemClsCode = ' NVL';
 | 
|---|
 | 244 |   RemClsText:array[1..4] of string = ('','National','VISN','Local');
 | 
|---|
 | 245 | 
 | 
|---|
 | 246 | var
 | 
|---|
 | 247 |   LocCombo: TORComboBox;
 | 
|---|
 | 248 |   i, idx: integer;
 | 
|---|
 | 249 |   tmp, tmp2, tmp3: string;
 | 
|---|
 | 250 |   Node: TORTreeNode;
 | 
|---|
 | 251 | 
 | 
|---|
 | 252 | begin
 | 
|---|
 | 253 |   FTopSortTag := 3;
 | 
|---|
 | 254 |   FTopSortUp  := TRUE;
 | 
|---|
 | 255 |   FBottomSortTag := 2;
 | 
|---|
 | 256 |   FBottomSortUp := TRUE;
 | 
|---|
 | 257 |   FEditingLevel := dlPackage;
 | 
|---|
 | 258 | 
 | 
|---|
 | 259 |   ResizeAnchoredFormToFont(self);
 | 
|---|
 | 260 |   pnlBtns.Top := pnlBottom.Top + pnlBottom.Height;
 | 
|---|
 | 261 | 
 | 
|---|
 | 262 |   FCatInfo := TORStringList.Create;
 | 
|---|
 | 263 |   FData := TORStringList.Create;
 | 
|---|
 | 264 |   FUserInfo := TORStringList.Create;
 | 
|---|
 | 265 |   FDivisions := TORStringList.Create;
 | 
|---|
 | 266 |   FServices := TORStringList.Create;
 | 
|---|
 | 267 |   FLocations := TORStringList.Create;
 | 
|---|
 | 268 |   FClasses := TORStringList.Create;
 | 
|---|
 | 269 |   FUsers := TORStringList.Create;
 | 
|---|
 | 270 |   FMasterList := TORStringList.Create;
 | 
|---|
 | 271 |   FMasterList.Assign(GetAllRemindersAndCategories);
 | 
|---|
 | 272 |   for i := 0 to FMasterList.Count-1 do
 | 
|---|
 | 273 |   begin
 | 
|---|
 | 274 |     tmp := FMasterList[i];
 | 
|---|
 | 275 |     tmp2 := piece(tmp,U,4);
 | 
|---|
 | 276 |     if tmp2 = piece(tmp,U,3) then
 | 
|---|
 | 277 |       tmp2 := '';
 | 
|---|
 | 278 |     tmp3 := piece(tmp,U,5);
 | 
|---|
 | 279 |     if tmp3 = '' then tmp3 := ' ';
 | 
|---|
 | 280 |     idx := pos(tmp3,RemClsCode);
 | 
|---|
 | 281 |     if idx > 0 then
 | 
|---|
 | 282 |       tmp3 := RemClsText[idx]
 | 
|---|
 | 283 |     else
 | 
|---|
 | 284 |       tmp3 := '';
 | 
|---|
 | 285 |     if tmp3 <> '' then
 | 
|---|
 | 286 |     begin
 | 
|---|
 | 287 |       if tmp2 <> '' then
 | 
|---|
 | 288 |         tmp2 := tmp2 + ' - ';
 | 
|---|
 | 289 |       tmp2 := tmp2 + tmp3;
 | 
|---|
 | 290 |     end;
 | 
|---|
 | 291 |     if tmp2 <> '' then
 | 
|---|
 | 292 |       tmp2 := ' (' + tmp2 + ')';
 | 
|---|
 | 293 |     tmp := Piece(tmp,U,1) + Pieces(tmp,U,2,3) + tmp2 + U + tmp2;
 | 
|---|
 | 294 |     FMasterList[i] := tmp;
 | 
|---|
 | 295 |   end;
 | 
|---|
 | 296 | 
 | 
|---|
 | 297 |   FUserMode := AsUser;
 | 
|---|
 | 298 |   FCurUser := User.DUZ;
 | 
|---|
 | 299 |   GetUserInfo(User.DUZ);
 | 
|---|
 | 300 |   FCurLoc := Encounter.Location;
 | 
|---|
 | 301 |   idx := FUserInfo.IndexOfPiece(DivisionCode);
 | 
|---|
 | 302 |   if idx >= 0 then
 | 
|---|
 | 303 |     FCurDiv := StrToIntDef(Piece(FUserInfo[idx],U,2),0)
 | 
|---|
 | 304 |   else
 | 
|---|
 | 305 |     FCurDiv := 0;
 | 
|---|
 | 306 |   idx := FUserInfo.IndexOfPiece(ServiceCode);
 | 
|---|
 | 307 |   if idx >= 0 then
 | 
|---|
 | 308 |     FCurSer := StrToIntDef(Piece(FUserInfo[idx],U,2),0)
 | 
|---|
 | 309 |   else
 | 
|---|
 | 310 |     FCurSer := User.Service;
 | 
|---|
 | 311 |   cbxUser.InitLongList(User.Name);
 | 
|---|
 | 312 |   cbxUser.SelectByIEN(FCurUser);
 | 
|---|
 | 313 |   GetPCECodes(FDivisions, TAG_HISTLOC);
 | 
|---|
 | 314 |   FDivisions.Delete(0);
 | 
|---|
 | 315 |   FCurClass := 0;
 | 
|---|
 | 316 |   if AsUser then
 | 
|---|
 | 317 |   begin
 | 
|---|
 | 318 |     pnlCAC.Visible := FALSE;
 | 
|---|
 | 319 |     LocCombo := cbxUserLoc;
 | 
|---|
 | 320 |     btnLock.Visible := FALSE;
 | 
|---|
 | 321 |   end
 | 
|---|
 | 322 |   else
 | 
|---|
 | 323 |   begin
 | 
|---|
 | 324 |     pnlUser.Visible := FALSE;
 | 
|---|
 | 325 |     LocCombo := cbxLocation;
 | 
|---|
 | 326 |     cbxDivision.Items.Assign(FDivisions);
 | 
|---|
 | 327 |     cbxDivision.SelectByIEN(FCurDiv);
 | 
|---|
 | 328 |     cbxService.InitLongList(GetExternalName(dlService, FCurSer));
 | 
|---|
 | 329 |     cbxService.SelectByIEN(FCurSer);
 | 
|---|
 | 330 |     cbxClass.InitLongList('');
 | 
|---|
 | 331 |     if FCurClass <> 0 then
 | 
|---|
 | 332 |       cbxClass.SelectByIEN(FCurClass);
 | 
|---|
 | 333 |   end;
 | 
|---|
 | 334 |   LocCombo.InitLongList(Encounter.LocationName);
 | 
|---|
 | 335 |   LocCombo.SelectByIEN(FCurLoc);
 | 
|---|
 | 336 |   if AsUser then
 | 
|---|
 | 337 |     cbUser.Checked := TRUE;
 | 
|---|
 | 338 | 
 | 
|---|
 | 339 |   tvAll.Items.BeginUpdate;
 | 
|---|
 | 340 |   try
 | 
|---|
 | 341 |     for i := 0 to FMasterList.Count-1 do
 | 
|---|
 | 342 |     begin
 | 
|---|
 | 343 |       Node := TORTreeNode(tvAll.Items.Add(nil,''));
 | 
|---|
 | 344 |       Node.StringData := FMasterList[i];
 | 
|---|
 | 345 |       if copy(FMasterList[i],1,1) = CVCatCode then
 | 
|---|
 | 346 |       begin
 | 
|---|
 | 347 |         idx := 1;
 | 
|---|
 | 348 |         tvAll.Items.AddChild(Node, DummyNode);
 | 
|---|
 | 349 |       end
 | 
|---|
 | 350 |       else
 | 
|---|
 | 351 |         idx := 0;
 | 
|---|
 | 352 |       Node.ImageIndex := idx;
 | 
|---|
 | 353 |       Node.SelectedIndex := idx;
 | 
|---|
 | 354 |     end;
 | 
|---|
 | 355 |   finally
 | 
|---|
 | 356 |     tvAll.Items.EndUpdate;
 | 
|---|
 | 357 |   end;
 | 
|---|
 | 358 |   
 | 
|---|
 | 359 |   FInitialized := TRUE;
 | 
|---|
 | 360 |   UpdateView;
 | 
|---|
 | 361 |   UpdateButtons;
 | 
|---|
 | 362 | end;
 | 
|---|
 | 363 | 
 | 
|---|
 | 364 | procedure TfrmRemCoverSheet.cbxLocationNeedData(Sender: TObject;
 | 
|---|
 | 365 |   const StartFrom: String; Direction, InsertAt: Integer);
 | 
|---|
 | 366 | begin
 | 
|---|
 | 367 |   TORComboBox(Sender).ForDataUse(SubSetOfLocations(StartFrom, Direction));
 | 
|---|
 | 368 | end;
 | 
|---|
 | 369 | 
 | 
|---|
 | 370 | procedure TfrmRemCoverSheet.cbxServiceNeedData(Sender: TObject;
 | 
|---|
 | 371 |   const StartFrom: String; Direction, InsertAt: Integer);
 | 
|---|
 | 372 | begin
 | 
|---|
 | 373 |   cbxService.ForDataUse(ServiceSearch(StartFrom, Direction, TRUE));
 | 
|---|
 | 374 | end;
 | 
|---|
 | 375 | 
 | 
|---|
 | 376 | procedure TfrmRemCoverSheet.cbxUserNeedData(Sender: TObject;
 | 
|---|
 | 377 |   const StartFrom: String; Direction, InsertAt: Integer);
 | 
|---|
 | 378 | begin
 | 
|---|
 | 379 |   cbxUser.ForDataUse(SubSetOfPersons(StartFrom, Direction));
 | 
|---|
 | 380 | end;
 | 
|---|
 | 381 | 
 | 
|---|
 | 382 | procedure TfrmRemCoverSheet.cbxClassNeedData(Sender: TObject;
 | 
|---|
 | 383 |   const StartFrom: String; Direction, InsertAt: Integer);
 | 
|---|
 | 384 | begin
 | 
|---|
 | 385 |   cbxClass.ForDataUse(SubSetOfUserClasses(StartFrom, Direction));
 | 
|---|
 | 386 | end;
 | 
|---|
 | 387 | 
 | 
|---|
 | 388 | procedure TfrmRemCoverSheet.FormDestroy(Sender: TObject);
 | 
|---|
 | 389 | begin
 | 
|---|
 | 390 |   FMasterList.Free;
 | 
|---|
 | 391 |   FUsers.Free;
 | 
|---|
 | 392 |   FClasses.Free;
 | 
|---|
 | 393 |   FLocations.Free;
 | 
|---|
 | 394 |   FServices.Free;
 | 
|---|
 | 395 |   FDivisions.Free;
 | 
|---|
 | 396 |   FUserInfo.Free;
 | 
|---|
 | 397 |   FData.KillObjects;
 | 
|---|
 | 398 |   FData.Free;
 | 
|---|
 | 399 |   FCatInfo.KillObjects;
 | 
|---|
 | 400 |   FCatInfo.Free;
 | 
|---|
 | 401 | end;
 | 
|---|
 | 402 | 
 | 
|---|
 | 403 | procedure TfrmRemCoverSheet.GetUserInfo(AUser: Int64);
 | 
|---|
 | 404 | begin
 | 
|---|
 | 405 |   if FUser <> AUser then
 | 
|---|
 | 406 |   begin
 | 
|---|
 | 407 |     FUser := AUser;
 | 
|---|
 | 408 |     FUserInfo.Assign(UserDivClassInfo(FUser));
 | 
|---|
 | 409 |   end;
 | 
|---|
 | 410 | end;
 | 
|---|
 | 411 | 
 | 
|---|
 | 412 | function TfrmRemCoverSheet.GetCurrent(IEN: Int64; Level: TRemCoverDataLevel;
 | 
|---|
 | 413 |                            Show: boolean; Add: boolean = FALSE): TORStringList;
 | 
|---|
 | 414 | var
 | 
|---|
 | 415 |   lvl, cls, sIEN: string;
 | 
|---|
 | 416 |   tmpSL: TORStringList;
 | 
|---|
 | 417 |   i, idx: integer;
 | 
|---|
 | 418 | 
 | 
|---|
 | 419 | begin
 | 
|---|
 | 420 |   idx := FData.IndexOfPiece(DataCode[Level] + IntToStr(IEN));
 | 
|---|
 | 421 |   if idx < 0 then
 | 
|---|
 | 422 |   begin
 | 
|---|
 | 423 |     if (IEN = 0) and (not (Level in [dlPackage, dlSystem])) then
 | 
|---|
 | 424 |     begin
 | 
|---|
 | 425 |       Result := nil;
 | 
|---|
 | 426 |       exit;
 | 
|---|
 | 427 |     end;
 | 
|---|
 | 428 |     cls := '';
 | 
|---|
 | 429 |     sIEN := IntToStr(IEN);
 | 
|---|
 | 430 |     lvl := InternalName[Level];
 | 
|---|
 | 431 |     case Level of
 | 
|---|
 | 432 |       dlDivision, dlService, dlLocation, dlUser:
 | 
|---|
 | 433 |         lvl := lvl + '.`' + sIEN;
 | 
|---|
 | 434 |       dlUserClass:
 | 
|---|
 | 435 |         cls := sIEN;
 | 
|---|
 | 436 |     end;
 | 
|---|
 | 437 |     if (lvl <> '') then
 | 
|---|
 | 438 |     begin
 | 
|---|
 | 439 |       tmpSL := TORStringList.Create;
 | 
|---|
 | 440 |       try
 | 
|---|
 | 441 |         tmpSL.Assign(GetCoverSheetLvlData(lvl, cls));
 | 
|---|
 | 442 |         if (not Add) and (tmpSL.Count = 0) then
 | 
|---|
 | 443 |           FreeAndNil(tmpSL);
 | 
|---|
 | 444 |         idx := FData.AddObject(DataCode[Level] + IntToStr(IEN), tmpSL);
 | 
|---|
 | 445 |       except
 | 
|---|
 | 446 |         tmpSL.Free;
 | 
|---|
 | 447 |         raise;
 | 
|---|
 | 448 |       end;
 | 
|---|
 | 449 |     end;
 | 
|---|
 | 450 |   end;
 | 
|---|
 | 451 |   if idx >= 0 then
 | 
|---|
 | 452 |   begin
 | 
|---|
 | 453 |     tmpSL := TORStringList(FData.Objects[idx]);
 | 
|---|
 | 454 |     if Add and (not assigned(tmpSL)) then
 | 
|---|
 | 455 |     begin
 | 
|---|
 | 456 |       tmpSL := TORStringList.Create;
 | 
|---|
 | 457 |       FData.Objects[idx] := tmpSL;
 | 
|---|
 | 458 |     end;
 | 
|---|
 | 459 |   end
 | 
|---|
 | 460 |   else
 | 
|---|
 | 461 |     tmpSL := nil;
 | 
|---|
 | 462 |   if Show and assigned(tmpSL) then
 | 
|---|
 | 463 |   begin
 | 
|---|
 | 464 |     for i := 0 to tmpSL.Count-1 do
 | 
|---|
 | 465 |       SetupItem(lvView.Items.Add, tmpSL[i], Level, IEN);
 | 
|---|
 | 466 |   end;
 | 
|---|
 | 467 |   Result := tmpSL;
 | 
|---|
 | 468 | end;
 | 
|---|
 | 469 | 
 | 
|---|
 | 470 | procedure TfrmRemCoverSheet.UpdateView;
 | 
|---|
 | 471 | var
 | 
|---|
 | 472 |   idx: integer;
 | 
|---|
 | 473 | 
 | 
|---|
 | 474 | begin
 | 
|---|
 | 475 |   if FInitialized and (not FUpdatingView) then
 | 
|---|
 | 476 |   begin
 | 
|---|
 | 477 |     lvView.Items.BeginUpdate;
 | 
|---|
 | 478 |     try
 | 
|---|
 | 479 |       lvView.Items.Clear;
 | 
|---|
 | 480 |       GetCurrent(0, dlPackage, TRUE);
 | 
|---|
 | 481 |       GetCurrent(0, dlSystem, TRUE);
 | 
|---|
 | 482 |       GetCurrent(FCurDiv, dlDivision, TRUE);
 | 
|---|
 | 483 |       GetCurrent(FCurSer, dlService, TRUE);
 | 
|---|
 | 484 |       GetCurrent(FCurLoc, dlLocation, TRUE);
 | 
|---|
 | 485 |       if FCurClass > 0 then
 | 
|---|
 | 486 |         GetCurrent(FCurClass, dlUserClass, TRUE)
 | 
|---|
 | 487 |       else
 | 
|---|
 | 488 |       begin
 | 
|---|
 | 489 |         idx := -1;
 | 
|---|
 | 490 |         repeat
 | 
|---|
 | 491 |           idx := FUserInfo.IndexOfPiece(UserClassCode,U,1,idx);
 | 
|---|
 | 492 |           if idx >= 0 then
 | 
|---|
 | 493 |             GetCurrent(StrToIntDef(Piece(FUserInfo[idx],U,2),0), dlUserClass, TRUE)
 | 
|---|
 | 494 |         until(idx < 0);
 | 
|---|
 | 495 |       end;
 | 
|---|
 | 496 |       GetCurrent(FCurUser, dlUser, TRUE);
 | 
|---|
 | 497 |     finally
 | 
|---|
 | 498 |       lvView.Items.EndUpdate;
 | 
|---|
 | 499 |     end;
 | 
|---|
 | 500 |   end;
 | 
|---|
 | 501 | end;
 | 
|---|
 | 502 | 
 | 
|---|
 | 503 | procedure TfrmRemCoverSheet.SetupItem(Item: TListItem; const Data: string);
 | 
|---|
 | 504 | var
 | 
|---|
 | 505 |   AddCode, RemCode, rIEN, Seq: string;
 | 
|---|
 | 506 | 
 | 
|---|
 | 507 | begin
 | 
|---|
 | 508 |   Seq := Piece(Data,U,1);
 | 
|---|
 | 509 |   rIEN := Piece(Data,U,2);
 | 
|---|
 | 510 |   Item.Caption := Piece(Data,U,3);
 | 
|---|
 | 511 |   AddCode := copy(rIEN,1,1);
 | 
|---|
 | 512 |   RemCode := copy(rIEN,2,1);
 | 
|---|
 | 513 |   delete(rIEN,1,1);
 | 
|---|
 | 514 |   if AddCode = CVLockCode then
 | 
|---|
 | 515 |     Item.StateIndex := 5
 | 
|---|
 | 516 |   else
 | 
|---|
 | 517 |   if AddCode = CVRemoveCode then
 | 
|---|
 | 518 |     Item.StateIndex := 4
 | 
|---|
 | 519 |   else
 | 
|---|
 | 520 |   if AddCode = CVAddCode then
 | 
|---|
 | 521 |     Item.StateIndex := 3;
 | 
|---|
 | 522 |   if RemCode = CVCatCode then
 | 
|---|
 | 523 |     Item.ImageIndex := 1
 | 
|---|
 | 524 |   else
 | 
|---|
 | 525 |   if RemCode = CVRemCode then
 | 
|---|
 | 526 |     Item.ImageIndex := 0
 | 
|---|
 | 527 |   else
 | 
|---|
 | 528 |     Item.ImageIndex := -1;
 | 
|---|
 | 529 |   Item.SubItems.Clear;
 | 
|---|
 | 530 |   Item.SubItems.Add(Seq);     // IdxSeq  = 0
 | 
|---|
 | 531 |   Item.SubItems.Add('');      // IdxLvl  = 1
 | 
|---|
 | 532 |   Item.SubItems.Add('');      // IdxType = 2
 | 
|---|
 | 533 |   Item.SubItems.Add('');      // IdxTIEN = 3
 | 
|---|
 | 534 |   Item.SubItems.Add('');      // IdxLvl2 = 4
 | 
|---|
 | 535 |   Item.SubItems.Add(AddCode); // IdxAdd  = 5
 | 
|---|
 | 536 |   Item.SubItems.Add(rIEN);    // IdxIEN  = 6
 | 
|---|
 | 537 | end;
 | 
|---|
 | 538 | 
 | 
|---|
 | 539 | procedure TfrmRemCoverSheet.SetupItem(Item: TListItem; const Data: string;
 | 
|---|
 | 540 |                          Level: TRemCoverDataLevel; IEN: Int64);
 | 
|---|
 | 541 | begin
 | 
|---|
 | 542 |   SetupItem(Item, Data);
 | 
|---|
 | 543 |   Item.SubItems[IdxLvl]  := DataName[Level];
 | 
|---|
 | 544 |   Item.SubItems[IdxType] := GetExternalName(Level, IEN);
 | 
|---|
 | 545 |   Item.SubItems[IdxTIEN] := IntToStr(IEN);
 | 
|---|
 | 546 |   Item.SubItems[IdxLvl2] := IntToStr(ord(Level));
 | 
|---|
 | 547 | end;
 | 
|---|
 | 548 | 
 | 
|---|
 | 549 | function TfrmRemCoverSheet.GetExternalName(Level: TRemCoverDataLevel; IEN: Int64): string;
 | 
|---|
 | 550 | 
 | 
|---|
 | 551 |   function GetNameFromList(List: TORStringList; IEN: Int64; FileNum: Double): string;
 | 
|---|
 | 552 |   var
 | 
|---|
 | 553 |     idx: integer;
 | 
|---|
 | 554 | 
 | 
|---|
 | 555 |   begin
 | 
|---|
 | 556 |     idx := List.IndexOfPiece(IntToStr(IEN));
 | 
|---|
 | 557 |     if idx < 0 then
 | 
|---|
 | 558 |       idx := List.Add(IntToStr(IEN) + U + ExternalName(IEN, FileNum));
 | 
|---|
 | 559 |     Result := piece(List[idx],U,2);
 | 
|---|
 | 560 |   end;
 | 
|---|
 | 561 | 
 | 
|---|
 | 562 | begin
 | 
|---|
 | 563 |   case Level of
 | 
|---|
 | 564 |     dlDivision:  Result := GetNameFromList(FDivisions, IEN, 4);
 | 
|---|
 | 565 |     dlService:   Result := GetNameFromList(FServices, IEN, 49);
 | 
|---|
 | 566 |     dlLocation:  Result := GetNameFromList(FLocations, IEN, 44);
 | 
|---|
 | 567 |     dlUserClass: Result := GetNameFromList(FClasses, IEN, 8930);
 | 
|---|
 | 568 |     dlUser:      Result := GetNameFromList(FUsers, IEN, 200);
 | 
|---|
 | 569 |     else         Result := '';
 | 
|---|
 | 570 |   end;
 | 
|---|
 | 571 | end;
 | 
|---|
 | 572 | 
 | 
|---|
 | 573 | procedure TfrmRemCoverSheet.cbxDivisionChange(Sender: TObject);
 | 
|---|
 | 574 | begin
 | 
|---|
 | 575 |   FCurDiv := cbxDivision.ItemIEN;
 | 
|---|
 | 576 |   FUpdatePending := cbDivision;
 | 
|---|
 | 577 |   if not cbxDivision.DroppedDown then
 | 
|---|
 | 578 |     cbxDropDownClose(nil);
 | 
|---|
 | 579 | end;
 | 
|---|
 | 580 | 
 | 
|---|
 | 581 | procedure TfrmRemCoverSheet.cbxServiceChange(Sender: TObject);
 | 
|---|
 | 582 | begin
 | 
|---|
 | 583 |   FCurSer := cbxService.ItemIEN;
 | 
|---|
 | 584 |   FUpdatePending := cbService;
 | 
|---|
 | 585 |   if not cbxService.DroppedDown then
 | 
|---|
 | 586 |     cbxDropDownClose(nil);
 | 
|---|
 | 587 | end;
 | 
|---|
 | 588 | 
 | 
|---|
 | 589 | procedure TfrmRemCoverSheet.cbxLocationChange(Sender: TObject);
 | 
|---|
 | 590 | begin
 | 
|---|
 | 591 |   FCurLoc := TORComboBox(Sender).ItemIEN;
 | 
|---|
 | 592 |   FUpdatePending := cbLocation;
 | 
|---|
 | 593 |   if not TORComboBox(Sender).DroppedDown then
 | 
|---|
 | 594 |     cbxDropDownClose(nil);
 | 
|---|
 | 595 | end;
 | 
|---|
 | 596 | 
 | 
|---|
 | 597 | procedure TfrmRemCoverSheet.cbxClassChange(Sender: TObject);
 | 
|---|
 | 598 | begin
 | 
|---|
 | 599 |   FCurClass := cbxClass.ItemIEN;
 | 
|---|
 | 600 |   FUpdatePending := cbUserClass;
 | 
|---|
 | 601 |   if not cbxClass.DroppedDown then
 | 
|---|
 | 602 |     cbxDropDownClose(nil);
 | 
|---|
 | 603 | end;
 | 
|---|
 | 604 | 
 | 
|---|
 | 605 | procedure TfrmRemCoverSheet.cbxUserChange(Sender: TObject);
 | 
|---|
 | 606 | var
 | 
|---|
 | 607 |   NewVal, idx: integer;
 | 
|---|
 | 608 | 
 | 
|---|
 | 609 | begin
 | 
|---|
 | 610 |   FCurUser := cbxUser.ItemIEN;
 | 
|---|
 | 611 |   GetUserInfo(FCurUser);
 | 
|---|
 | 612 |   idx := FUserInfo.IndexOfPiece(DivisionCode);
 | 
|---|
 | 613 |   if idx >= 0 then
 | 
|---|
 | 614 |   begin
 | 
|---|
 | 615 |     NewVal := StrToIntDef(Piece(FUserInfo[idx],U,2),0);
 | 
|---|
 | 616 |     if NewVal <> FCurDiv then
 | 
|---|
 | 617 |     begin
 | 
|---|
 | 618 |       FCurDiv := NewVal;
 | 
|---|
 | 619 |       cbxDivision.InitLongList(GetExternalName(dlDivision, NewVal));
 | 
|---|
 | 620 |       cbxDivision.SelectByIEN(NewVal);
 | 
|---|
 | 621 |     end;
 | 
|---|
 | 622 |   end;
 | 
|---|
 | 623 |   idx := FUserInfo.IndexOfPiece(ServiceCode);
 | 
|---|
 | 624 |   if idx >= 0 then
 | 
|---|
 | 625 |   begin
 | 
|---|
 | 626 |     NewVal := StrToIntDef(Piece(FUserInfo[idx],U,2),0);
 | 
|---|
 | 627 |     if NewVal <> FCurSer then
 | 
|---|
 | 628 |     begin
 | 
|---|
 | 629 |       FCurSer := NewVal;
 | 
|---|
 | 630 |       cbxService.InitLongList(GetExternalName(dlService, NewVal));
 | 
|---|
 | 631 |       cbxService.SelectByIEN(NewVal);
 | 
|---|
 | 632 |     end;
 | 
|---|
 | 633 |   end;
 | 
|---|
 | 634 |   FCurClass := 0;
 | 
|---|
 | 635 |   cbxClass.ItemIndex := -1;
 | 
|---|
 | 636 |   FUpdatePending := cbUser;
 | 
|---|
 | 637 |   if not cbxUser.DroppedDown then
 | 
|---|
 | 638 |     cbxDropDownClose(nil);
 | 
|---|
 | 639 | end;
 | 
|---|
 | 640 | 
 | 
|---|
 | 641 | procedure TfrmRemCoverSheet.cbxDropDownClose(Sender: TObject);
 | 
|---|
 | 642 | begin
 | 
|---|
 | 643 |   if assigned(FUpdatePending) then
 | 
|---|
 | 644 |   begin
 | 
|---|
 | 645 |     UpdateView;
 | 
|---|
 | 646 |     if FInitialized and (not FUserMode) then
 | 
|---|
 | 647 |     begin
 | 
|---|
 | 648 |       if FUpdatePending.Checked then
 | 
|---|
 | 649 |         cbEditLevelClick(FUpdatePending)
 | 
|---|
 | 650 |       else
 | 
|---|
 | 651 |         FUpdatePending.Checked := TRUE;
 | 
|---|
 | 652 |     end;
 | 
|---|
 | 653 |     FUpdatePending := nil;
 | 
|---|
 | 654 |   end;
 | 
|---|
 | 655 | end;
 | 
|---|
 | 656 | 
 | 
|---|
 | 657 | procedure TfrmRemCoverSheet.cbEditLevelClick(Sender: TObject);
 | 
|---|
 | 658 | var
 | 
|---|
 | 659 |   cb: TORCheckBox;
 | 
|---|
 | 660 |   tmp: string;
 | 
|---|
 | 661 | 
 | 
|---|
 | 662 | begin
 | 
|---|
 | 663 |   cb := TORCheckBox(Sender);
 | 
|---|
 | 664 |   if cb.Checked then
 | 
|---|
 | 665 |   begin
 | 
|---|
 | 666 |     FEditingLevel := TRemCoverDataLevel(cb.Tag);
 | 
|---|
 | 667 |     if FEditingLevel <> dlUserClass then
 | 
|---|
 | 668 |     begin
 | 
|---|
 | 669 |       FCurClass := 0;
 | 
|---|
 | 670 |       cbxClass.ItemIndex := -1;
 | 
|---|
 | 671 |     end;
 | 
|---|
 | 672 |     case FEditingLevel of
 | 
|---|
 | 673 |       dlDivision:  FEditingIEN := FCurDiv;
 | 
|---|
 | 674 |       dlService:   FEditingIEN := FCurSer;
 | 
|---|
 | 675 |       dlLocation:  FEditingIEN := FCurLoc;
 | 
|---|
 | 676 |       dlUserClass: FEditingIEN := FCurClass;
 | 
|---|
 | 677 |       dlUser:      FEditingIEN := FCurUser;
 | 
|---|
 | 678 |       else         FEditingIEN := 0;
 | 
|---|
 | 679 |     end;
 | 
|---|
 | 680 |     if FEditingIEN = 0 then
 | 
|---|
 | 681 |       tmp := ' '
 | 
|---|
 | 682 |     else
 | 
|---|
 | 683 |       tmp := ': ';
 | 
|---|
 | 684 |     lblEdit.Caption := '  Editing Cover Sheet Reminders for ' + DataName[FEditingLevel] +
 | 
|---|
 | 685 |                         tmp + GetExternalName(FEditingLevel, FEditingIEN);
 | 
|---|
 | 686 |     lvCover.Columns[0].Caption := DataName[FEditingLevel] + ' Level Reminders';
 | 
|---|
 | 687 |     UpdateView;
 | 
|---|
 | 688 |     UpdateMasterListView;
 | 
|---|
 | 689 |   end
 | 
|---|
 | 690 |   else
 | 
|---|
 | 691 |   begin
 | 
|---|
 | 692 |     FEditingLevel := dlPackage;
 | 
|---|
 | 693 |     FEditingIEN := 0;
 | 
|---|
 | 694 |     lblEdit.Caption := '';
 | 
|---|
 | 695 |     lvCover.Items.BeginUpdate;
 | 
|---|
 | 696 |     try
 | 
|---|
 | 697 |       lvCover.Items.Clear;
 | 
|---|
 | 698 |     finally
 | 
|---|
 | 699 |       lvCover.Items.EndUpdate;
 | 
|---|
 | 700 |     end;
 | 
|---|
 | 701 |   end;
 | 
|---|
 | 702 | 
 | 
|---|
 | 703 | end;
 | 
|---|
 | 704 | 
 | 
|---|
 | 705 | procedure TfrmRemCoverSheet.UpdateMasterListView;
 | 
|---|
 | 706 | var
 | 
|---|
 | 707 |   i: integer;
 | 
|---|
 | 708 |   tmpSL: TStringList;
 | 
|---|
 | 709 |   itm: TListItem;
 | 
|---|
 | 710 | 
 | 
|---|
 | 711 | begin
 | 
|---|
 | 712 |   lvCover.Items.BeginUpdate;
 | 
|---|
 | 713 |   try
 | 
|---|
 | 714 |     lvCover.Items.Clear;
 | 
|---|
 | 715 |     if FEditingLevel <> dlPackage then
 | 
|---|
 | 716 |     begin
 | 
|---|
 | 717 |       tmpSL := GetCurrent(FEditingIEN, FEditingLevel, FALSE);
 | 
|---|
 | 718 |       if assigned(tmpSL) then
 | 
|---|
 | 719 |       begin
 | 
|---|
 | 720 |         for i := 0 to tmpSL.Count-1 do
 | 
|---|
 | 721 |         begin
 | 
|---|
 | 722 |           itm := lvCover.Items.Add;
 | 
|---|
 | 723 |           SetupItem(itm, tmpSL[i]);
 | 
|---|
 | 724 |         end;
 | 
|---|
 | 725 |       end;
 | 
|---|
 | 726 |     end;
 | 
|---|
 | 727 |   finally
 | 
|---|
 | 728 |     lvCover.Items.EndUpdate;
 | 
|---|
 | 729 |   end;
 | 
|---|
 | 730 |   UpdateButtons;
 | 
|---|
 | 731 | end;
 | 
|---|
 | 732 | 
 | 
|---|
 | 733 | procedure TfrmRemCoverSheet.UpdateButtons;
 | 
|---|
 | 734 | var
 | 
|---|
 | 735 |   ok: boolean;
 | 
|---|
 | 736 |   i: integer;
 | 
|---|
 | 737 |   Current, Lowest, Highest: integer;
 | 
|---|
 | 738 | 
 | 
|---|
 | 739 | begin
 | 
|---|
 | 740 |   lvCover.Enabled := (FEditingLevel <> dlPackage);
 | 
|---|
 | 741 |   ok := assigned(tvAll.Selected) and (FEditingLevel <> dlPackage);
 | 
|---|
 | 742 |   sbCopyRight.Enabled := ok;
 | 
|---|
 | 743 | 
 | 
|---|
 | 744 |   ok := assigned(lvCover.Selected) and (FEditingLevel <> dlPackage);
 | 
|---|
 | 745 |   sbCopyLeft.Enabled := ok;
 | 
|---|
 | 746 | 
 | 
|---|
 | 747 |   ok := assigned(lvCover.Selected);
 | 
|---|
 | 748 |   lblSeq.Enabled := ok;
 | 
|---|
 | 749 |   edtSeq.Enabled := ok;
 | 
|---|
 | 750 | 
 | 
|---|
 | 751 |   FUpdating := TRUE;
 | 
|---|
 | 752 |   try
 | 
|---|
 | 753 |     udSeq.Enabled := ok;
 | 
|---|
 | 754 |     if ok then
 | 
|---|
 | 755 |       udSeq.Position := StrToIntDef(lvCover.Selected.SubItems[IdxSeq],1)
 | 
|---|
 | 756 |     else
 | 
|---|
 | 757 |       udSeq.Position := 1;
 | 
|---|
 | 758 |   finally
 | 
|---|
 | 759 |     FUpdating := FALSE;
 | 
|---|
 | 760 |   end;
 | 
|---|
 | 761 | 
 | 
|---|
 | 762 |   btnAdd.Enabled := ok;
 | 
|---|
 | 763 |   btnRemove.Enabled := ok;
 | 
|---|
 | 764 |   btnLock.Enabled := ok and (FEditingLevel <> dlUser);
 | 
|---|
 | 765 |   if ok then
 | 
|---|
 | 766 |     ok :=(lvCover.Items.Count > 1);
 | 
|---|
 | 767 |   Lowest := 99999;
 | 
|---|
 | 768 |   Highest := -1;
 | 
|---|
 | 769 |   if ok then
 | 
|---|
 | 770 |   begin
 | 
|---|
 | 771 |     for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 772 |     begin
 | 
|---|
 | 773 |       Current := StrToIntDef(lvCover.Items[i].SubItems[IdxSeq], 0);
 | 
|---|
 | 774 |       if Lowest > Current then
 | 
|---|
 | 775 |         Lowest := Current;
 | 
|---|
 | 776 |       if Highest < Current then
 | 
|---|
 | 777 |         Highest := Current;
 | 
|---|
 | 778 |     end;
 | 
|---|
 | 779 |     Current := StrToIntDef(lvCover.Selected.SubItems[IdxSeq], 0)
 | 
|---|
 | 780 |   end
 | 
|---|
 | 781 |   else
 | 
|---|
 | 782 |     Current := 0;
 | 
|---|
 | 783 |   sbUp.Enabled := ok and (Current > Lowest);
 | 
|---|
 | 784 |   sbDown.Enabled := ok and (Current < Highest);
 | 
|---|
 | 785 | end;
 | 
|---|
 | 786 | 
 | 
|---|
 | 787 | procedure TfrmRemCoverSheet.tvAllExpanding(Sender: TObject;
 | 
|---|
 | 788 |   Node: TTreeNode; var AllowExpansion: Boolean);
 | 
|---|
 | 789 | var
 | 
|---|
 | 790 |   List: TORStringList;
 | 
|---|
 | 791 |   i, idx: integer;
 | 
|---|
 | 792 |   CNode: TORTreeNode;
 | 
|---|
 | 793 | 
 | 
|---|
 | 794 | begin
 | 
|---|
 | 795 |   if Node.GetFirstChild.Text = DummyNode then
 | 
|---|
 | 796 |   begin
 | 
|---|
 | 797 |     Node.DeleteChildren;
 | 
|---|
 | 798 |     List := GetCatInfo(copy(piece(TORTreeNode(Node).StringData,U,1),2,99));
 | 
|---|
 | 799 |     if assigned(List) then
 | 
|---|
 | 800 |     begin
 | 
|---|
 | 801 |       for i := 0 to List.Count-1 do
 | 
|---|
 | 802 |       begin
 | 
|---|
 | 803 |         CNode := TORTreeNode(tvAll.Items.AddChild(Node,''));
 | 
|---|
 | 804 |         CNode.StringData := List[i];
 | 
|---|
 | 805 |         if copy(List[i],1,1) = CVCatCode then
 | 
|---|
 | 806 |         begin
 | 
|---|
 | 807 |           idx := 1;
 | 
|---|
 | 808 |           tvAll.Items.AddChild(CNode, DummyNode);
 | 
|---|
 | 809 |         end
 | 
|---|
 | 810 |         else
 | 
|---|
 | 811 |           idx := 0;
 | 
|---|
 | 812 |         CNode.ImageIndex := idx;
 | 
|---|
 | 813 |         CNode.SelectedIndex := idx;
 | 
|---|
 | 814 |       end;
 | 
|---|
 | 815 |     end;
 | 
|---|
 | 816 |   end;
 | 
|---|
 | 817 |   if FInternalExpansion then
 | 
|---|
 | 818 |     AllowExpansion := FALSE
 | 
|---|
 | 819 |   else
 | 
|---|
 | 820 |     AllowExpansion := Node.HasChildren;
 | 
|---|
 | 821 | end;
 | 
|---|
 | 822 | 
 | 
|---|
 | 823 | function TfrmRemCoverSheet.GetCatInfo(CatIEN: string): TORStringList;
 | 
|---|
 | 824 | var
 | 
|---|
 | 825 |   i, j, idx: integer;
 | 
|---|
 | 826 |   tmp: string;
 | 
|---|
 | 827 |   tmpSL: TStrings;
 | 
|---|
 | 828 | 
 | 
|---|
 | 829 | begin
 | 
|---|
 | 830 |   idx := FCatInfo.IndexOf(CatIEN);
 | 
|---|
 | 831 |   if idx < 0 then
 | 
|---|
 | 832 |   begin
 | 
|---|
 | 833 |     Result := TORStringList.Create;
 | 
|---|
 | 834 |     try
 | 
|---|
 | 835 |       tmpSL := GetCategoryItems(StrToIntDef(CatIEN,0));
 | 
|---|
 | 836 |       for i := 0 to tmpSL.Count-1 do
 | 
|---|
 | 837 |       begin
 | 
|---|
 | 838 |         tmp := copy(tmpSL[i],1,1);
 | 
|---|
 | 839 |         if tmp = CVCatCode then
 | 
|---|
 | 840 |           idx := 3
 | 
|---|
 | 841 |         else
 | 
|---|
 | 842 |           idx := 4;
 | 
|---|
 | 843 |         tmp := tmp + Piece(tmpSL[i],U,2) + U + Piece(tmpSL[i],U,idx);
 | 
|---|
 | 844 |         j := FMasterList.IndexOfPiece(piece(tmp,U,1));
 | 
|---|
 | 845 |         if j >= 0 then
 | 
|---|
 | 846 |           tmp := tmp + piece(FMasterList[j],U,3);
 | 
|---|
 | 847 |         Result.Add(tmp);
 | 
|---|
 | 848 |       end;
 | 
|---|
 | 849 |       FCatInfo.AddObject(CatIEN, Result);
 | 
|---|
 | 850 |     except
 | 
|---|
 | 851 |       Result.Free;
 | 
|---|
 | 852 |       raise;
 | 
|---|
 | 853 |     end;
 | 
|---|
 | 854 |   end
 | 
|---|
 | 855 |   else
 | 
|---|
 | 856 |     Result := TORStringList(FCatInfo.Objects[idx]);
 | 
|---|
 | 857 | end;
 | 
|---|
 | 858 | 
 | 
|---|
 | 859 | procedure TfrmRemCoverSheet.MarkListAsChanged;
 | 
|---|
 | 860 | var
 | 
|---|
 | 861 |   tmp: string;
 | 
|---|
 | 862 |   idx: integer;
 | 
|---|
 | 863 | 
 | 
|---|
 | 864 | begin
 | 
|---|
 | 865 |   idx := FData.IndexOfPiece(DataCode[FEditingLevel] + IntToStr(FEditingIEN));
 | 
|---|
 | 866 |   if idx >= 0 then
 | 
|---|
 | 867 |   begin
 | 
|---|
 | 868 |     tmp := FData[idx];
 | 
|---|
 | 869 |     SetPiece(Tmp,U,2,BoolChar[TRUE]);
 | 
|---|
 | 870 |     FData[idx] := tmp;
 | 
|---|
 | 871 |     btnApply.Enabled := TRUE;
 | 
|---|
 | 872 |     UpdateView;
 | 
|---|
 | 873 |   end;
 | 
|---|
 | 874 | end;
 | 
|---|
 | 875 | 
 | 
|---|
 | 876 | procedure TfrmRemCoverSheet.edtSeqChange(Sender: TObject);
 | 
|---|
 | 877 | begin
 | 
|---|
 | 878 |   if FUpdating or (not FInitialized) then exit;
 | 
|---|
 | 879 |   if FBottomSortTag <> 2 then
 | 
|---|
 | 880 |   begin
 | 
|---|
 | 881 |     FBottomSortTag := 2;
 | 
|---|
 | 882 |     lvCover.CustomSort(nil, 0);
 | 
|---|
 | 883 |   end;
 | 
|---|
 | 884 |   SetSeq(lvCover.Selected, IntToStr(udSeq.Position));
 | 
|---|
 | 885 |   lvCover.CustomSort(nil, 0);
 | 
|---|
 | 886 |   UpdateButtons;
 | 
|---|
 | 887 | end;
 | 
|---|
 | 888 | 
 | 
|---|
 | 889 | procedure TfrmRemCoverSheet.tvAllExpanded(Sender: TObject;
 | 
|---|
 | 890 |   Node: TTreeNode);
 | 
|---|
 | 891 | var
 | 
|---|
 | 892 |   idx: integer;
 | 
|---|
 | 893 | 
 | 
|---|
 | 894 | begin
 | 
|---|
 | 895 |   if Node.Expanded then
 | 
|---|
 | 896 |     idx := 2
 | 
|---|
 | 897 |   else
 | 
|---|
 | 898 |     idx := 1;
 | 
|---|
 | 899 |   Node.ImageIndex := idx;
 | 
|---|
 | 900 |   Node.SelectedIndex := idx;
 | 
|---|
 | 901 | end;
 | 
|---|
 | 902 | 
 | 
|---|
 | 903 | procedure TfrmRemCoverSheet.tvAllChange(Sender: TObject; Node: TTreeNode);
 | 
|---|
 | 904 | begin
 | 
|---|
 | 905 |   UpdateButtons;
 | 
|---|
 | 906 | end;
 | 
|---|
 | 907 | 
 | 
|---|
 | 908 | procedure TfrmRemCoverSheet.lvCoverChange(Sender: TObject; Item: TListItem;
 | 
|---|
 | 909 |   Change: TItemChange);
 | 
|---|
 | 910 | begin
 | 
|---|
 | 911 |   UpdateButtons;
 | 
|---|
 | 912 | end;
 | 
|---|
 | 913 | 
 | 
|---|
 | 914 | function TfrmRemCoverSheet.GetIndex(List: TORStringList;
 | 
|---|
 | 915 |   Item: TListItem): integer;
 | 
|---|
 | 916 | var
 | 
|---|
 | 917 |   IEN: string;
 | 
|---|
 | 918 | 
 | 
|---|
 | 919 | begin
 | 
|---|
 | 920 |   if assigned(Item) and assigned(List) then
 | 
|---|
 | 921 |   begin
 | 
|---|
 | 922 |     IEN := Item.SubItems[IdxAdd] + Item.SubItems[IdxIEN];
 | 
|---|
 | 923 |     Result := List.IndexOfPiece(IEN,U,2);
 | 
|---|
 | 924 |   end
 | 
|---|
 | 925 |   else
 | 
|---|
 | 926 |     Result := -1;
 | 
|---|
 | 927 | end;
 | 
|---|
 | 928 | 
 | 
|---|
 | 929 | procedure TfrmRemCoverSheet.ChangeStatus(Code: string);
 | 
|---|
 | 930 | var
 | 
|---|
 | 931 |   tmpSL: TORStringList;
 | 
|---|
 | 932 |   Idx: integer;
 | 
|---|
 | 933 |   tmp,p: string;
 | 
|---|
 | 934 | 
 | 
|---|
 | 935 | begin
 | 
|---|
 | 936 |   tmpSL := GetCurrent(FEditingIEN, FEditingLevel, FALSE);
 | 
|---|
 | 937 |   if assigned(tmpSL) then
 | 
|---|
 | 938 |   begin
 | 
|---|
 | 939 |     Idx := GetIndex(tmpSL, lvCover.Selected);
 | 
|---|
 | 940 |     if Idx >= 0 then
 | 
|---|
 | 941 |     begin
 | 
|---|
 | 942 |       tmp := tmpSL[idx];
 | 
|---|
 | 943 |       p := Piece(tmp,U,2);
 | 
|---|
 | 944 |       SetPiece(tmp,U,2,Code + copy(p,2,MaxInt));
 | 
|---|
 | 945 |       tmpSL[idx] := tmp;
 | 
|---|
 | 946 |       MarkListAsChanged;
 | 
|---|
 | 947 |       SetupItem(lvCover.Selected, tmp);
 | 
|---|
 | 948 |     end;
 | 
|---|
 | 949 |   end;
 | 
|---|
 | 950 | end;
 | 
|---|
 | 951 | 
 | 
|---|
 | 952 | procedure TfrmRemCoverSheet.btnAddClick(Sender: TObject);
 | 
|---|
 | 953 | begin
 | 
|---|
 | 954 |   ChangeStatus(CVAddCode);
 | 
|---|
 | 955 | end;
 | 
|---|
 | 956 | 
 | 
|---|
 | 957 | procedure TfrmRemCoverSheet.btnRemoveClick(Sender: TObject);
 | 
|---|
 | 958 | begin
 | 
|---|
 | 959 |   ChangeStatus(CVRemoveCode);
 | 
|---|
 | 960 | end;
 | 
|---|
 | 961 | 
 | 
|---|
 | 962 | procedure TfrmRemCoverSheet.btnLockClick(Sender: TObject);
 | 
|---|
 | 963 | begin
 | 
|---|
 | 964 |   ChangeStatus(CVLockCode);
 | 
|---|
 | 965 | end;
 | 
|---|
 | 966 | 
 | 
|---|
 | 967 | procedure TfrmRemCoverSheet.lvViewColumnClick(Sender: TObject;
 | 
|---|
 | 968 |   Column: TListColumn);
 | 
|---|
 | 969 | begin
 | 
|---|
 | 970 |   if FTopSortTag = Column.Tag then
 | 
|---|
 | 971 |     FTopSortUp := not FTopSortUp
 | 
|---|
 | 972 |   else
 | 
|---|
 | 973 |     FTopSortTag := Column.Tag;
 | 
|---|
 | 974 |   lvView.CustomSort(nil, 0);
 | 
|---|
 | 975 | end;
 | 
|---|
 | 976 | 
 | 
|---|
 | 977 | type
 | 
|---|
 | 978 |   TSortData = (sdRem, sdSeq, sdLvl, sdOther);
 | 
|---|
 | 979 | 
 | 
|---|
 | 980 | procedure TfrmRemCoverSheet.lvCoverColumnClick(Sender: TObject;
 | 
|---|
 | 981 |   Column: TListColumn);
 | 
|---|
 | 982 | begin
 | 
|---|
 | 983 |   if FBottomSortTag = Column.Tag then
 | 
|---|
 | 984 |     FBottomSortUp := not FBottomSortUp
 | 
|---|
 | 985 |   else
 | 
|---|
 | 986 |     FBottomSortTag := Column.Tag;
 | 
|---|
 | 987 |   lvCover.CustomSort(nil, 0);
 | 
|---|
 | 988 | end;
 | 
|---|
 | 989 | 
 | 
|---|
 | 990 | procedure TfrmRemCoverSheet.lvViewCompare(Sender: TObject; Item1,
 | 
|---|
 | 991 |   Item2: TListItem; Data: Integer; var Compare: Integer);
 | 
|---|
 | 992 | var
 | 
|---|
 | 993 |   i: integer;
 | 
|---|
 | 994 |   odr: array[1..4] of TSortData;
 | 
|---|
 | 995 |   s1, s2: string;
 | 
|---|
 | 996 | 
 | 
|---|
 | 997 | begin
 | 
|---|
 | 998 |   odr[1] := TSortData(FTopSortTag-1);
 | 
|---|
 | 999 |   case FTopSortTag of
 | 
|---|
 | 1000 |     1: begin
 | 
|---|
 | 1001 |          odr[2] := sdSeq;
 | 
|---|
 | 1002 |          odr[3] := sdLvl;
 | 
|---|
 | 1003 |          odr[4] := sdOther;
 | 
|---|
 | 1004 |        end;
 | 
|---|
 | 1005 | 
 | 
|---|
 | 1006 |     2: begin
 | 
|---|
 | 1007 |          odr[2] := sdLvl;
 | 
|---|
 | 1008 |          odr[3] := sdOther;
 | 
|---|
 | 1009 |          odr[4] := sdRem;
 | 
|---|
 | 1010 |        end;
 | 
|---|
 | 1011 | 
 | 
|---|
 | 1012 |     3: begin
 | 
|---|
 | 1013 |          odr[2] := sdOther;
 | 
|---|
 | 1014 |          odr[3] := sdSeq;
 | 
|---|
 | 1015 |          odr[4] := sdRem;
 | 
|---|
 | 1016 |        end;
 | 
|---|
 | 1017 | 
 | 
|---|
 | 1018 |     4: begin
 | 
|---|
 | 1019 |          odr[2] := sdLvl;
 | 
|---|
 | 1020 |          odr[3] := sdSeq;
 | 
|---|
 | 1021 |          odr[4] := sdRem;
 | 
|---|
 | 1022 |        end;
 | 
|---|
 | 1023 |   end;
 | 
|---|
 | 1024 |   Compare := 0;
 | 
|---|
 | 1025 |   for i := 1 to 4 do
 | 
|---|
 | 1026 |   begin
 | 
|---|
 | 1027 |     case odr[i] of
 | 
|---|
 | 1028 |       sdRem:   begin
 | 
|---|
 | 1029 |                  s1 := Item1.Caption;
 | 
|---|
 | 1030 |                  s2 := Item2.Caption;
 | 
|---|
 | 1031 |                end;
 | 
|---|
 | 1032 | 
 | 
|---|
 | 1033 |       sdSeq:   begin
 | 
|---|
 | 1034 |                  s1 := RPad(Item1.SubItems[IdxSeq]);
 | 
|---|
 | 1035 |                  s2 := RPad(Item2.SubItems[IdxSeq]);
 | 
|---|
 | 1036 |                end;
 | 
|---|
 | 1037 | 
 | 
|---|
 | 1038 |       sdLvl:   begin
 | 
|---|
 | 1039 |                  s1 := Item1.SubItems[IdxLvl2];
 | 
|---|
 | 1040 |                  s2 := Item2.SubItems[IdxLvl2];
 | 
|---|
 | 1041 |                end;
 | 
|---|
 | 1042 | 
 | 
|---|
 | 1043 |       sdOther: begin
 | 
|---|
 | 1044 |                  s1 := Item1.SubItems[IdxType];
 | 
|---|
 | 1045 |                  s2 := Item2.SubItems[IdxType];
 | 
|---|
 | 1046 |                end;
 | 
|---|
 | 1047 | 
 | 
|---|
 | 1048 |     end;
 | 
|---|
 | 1049 |     Compare := CompareText(s1, s2);
 | 
|---|
 | 1050 |     if Compare <> 0 then break;
 | 
|---|
 | 1051 |   end;
 | 
|---|
 | 1052 |   if not FTopSortUp then
 | 
|---|
 | 1053 |     Compare := -Compare;
 | 
|---|
 | 1054 | end;
 | 
|---|
 | 1055 | 
 | 
|---|
 | 1056 | procedure TfrmRemCoverSheet.lvCoverCompare(Sender: TObject; Item1,
 | 
|---|
 | 1057 |   Item2: TListItem; Data: Integer; var Compare: Integer);
 | 
|---|
 | 1058 | var
 | 
|---|
 | 1059 |   i: integer;
 | 
|---|
 | 1060 |   odr: array[1..2] of TSortData;
 | 
|---|
 | 1061 |   s1, s2: string;
 | 
|---|
 | 1062 | 
 | 
|---|
 | 1063 | begin
 | 
|---|
 | 1064 |   case FBottomSortTag of
 | 
|---|
 | 1065 |     1: begin
 | 
|---|
 | 1066 |          odr[1] := sdRem;
 | 
|---|
 | 1067 |          odr[2] := sdSeq;
 | 
|---|
 | 1068 |        end;
 | 
|---|
 | 1069 | 
 | 
|---|
 | 1070 |     2: begin
 | 
|---|
 | 1071 |          odr[1] := sdSeq;
 | 
|---|
 | 1072 |          odr[2] := sdRem;
 | 
|---|
 | 1073 |        end;
 | 
|---|
 | 1074 |   end;
 | 
|---|
 | 1075 |   Compare := 0;
 | 
|---|
 | 1076 |   for i := 1 to 2 do
 | 
|---|
 | 1077 |   begin
 | 
|---|
 | 1078 |     case odr[i] of
 | 
|---|
 | 1079 |       sdRem:   begin
 | 
|---|
 | 1080 |                  s1 := Item1.Caption;
 | 
|---|
 | 1081 |                  s2 := Item2.Caption;
 | 
|---|
 | 1082 |                end;
 | 
|---|
 | 1083 | 
 | 
|---|
 | 1084 |       sdSeq:   begin
 | 
|---|
 | 1085 |                  s1 := RPad(Item1.SubItems[IdxSeq]);
 | 
|---|
 | 1086 |                  s2 := RPad(Item2.SubItems[IdxSeq]);
 | 
|---|
 | 1087 |                end;
 | 
|---|
 | 1088 |     end;
 | 
|---|
 | 1089 |     Compare := CompareText(s1, s2);
 | 
|---|
 | 1090 |     if Compare <> 0 then break;
 | 
|---|
 | 1091 |   end;
 | 
|---|
 | 1092 |   if not FBottomSortUp then
 | 
|---|
 | 1093 |     Compare := -Compare;
 | 
|---|
 | 1094 | end;
 | 
|---|
 | 1095 | 
 | 
|---|
 | 1096 | procedure TfrmRemCoverSheet.sbUpClick(Sender: TObject);
 | 
|---|
 | 1097 | var
 | 
|---|
 | 1098 |   NextItem: TListItem;
 | 
|---|
 | 1099 |   Seq1, Seq2: string;
 | 
|---|
 | 1100 | 
 | 
|---|
 | 1101 | begin
 | 
|---|
 | 1102 |   if assigned(lvCover.Selected) then
 | 
|---|
 | 1103 |   begin
 | 
|---|
 | 1104 |     if FBottomSortTag <> 2 then
 | 
|---|
 | 1105 |     begin
 | 
|---|
 | 1106 |       FBottomSortTag := 2;
 | 
|---|
 | 1107 |       lvCover.CustomSort(nil, 0);
 | 
|---|
 | 1108 |     end;
 | 
|---|
 | 1109 |     if lvCover.Selected.Index > 0 then
 | 
|---|
 | 1110 |     begin
 | 
|---|
 | 1111 |       NextItem := lvCover.Items[lvCover.Selected.Index - 1];
 | 
|---|
 | 1112 |       Seq1 := NextItem.SubItems[IdxSeq];
 | 
|---|
 | 1113 |       Seq2 := lvCover.Selected.SubItems[IdxSeq];
 | 
|---|
 | 1114 |       SetSeq(NextItem, Seq2);
 | 
|---|
 | 1115 |       SetSeq(lvCover.Selected, Seq1);
 | 
|---|
 | 1116 |       lvCover.CustomSort(nil, 0);
 | 
|---|
 | 1117 |       UpdateButtons;
 | 
|---|
 | 1118 |     end;            
 | 
|---|
 | 1119 |   end;
 | 
|---|
 | 1120 | end;
 | 
|---|
 | 1121 | 
 | 
|---|
 | 1122 | procedure TfrmRemCoverSheet.sbDownClick(Sender: TObject);
 | 
|---|
 | 1123 | var
 | 
|---|
 | 1124 |   NextItem: TListItem;
 | 
|---|
 | 1125 |   Seq1, Seq2: string;
 | 
|---|
 | 1126 | 
 | 
|---|
 | 1127 | begin
 | 
|---|
 | 1128 |   if assigned(lvCover.Selected) then
 | 
|---|
 | 1129 |   begin
 | 
|---|
 | 1130 |     if FBottomSortTag <> 2 then
 | 
|---|
 | 1131 |     begin
 | 
|---|
 | 1132 |       FBottomSortTag := 2;
 | 
|---|
 | 1133 |       lvCover.CustomSort(nil, 0);
 | 
|---|
 | 1134 |     end;
 | 
|---|
 | 1135 |     if lvCover.Selected.Index < (lvCover.Items.Count-1) then
 | 
|---|
 | 1136 |     begin
 | 
|---|
 | 1137 |       NextItem := lvCover.Items[lvCover.Selected.Index + 1];
 | 
|---|
 | 1138 |       Seq1 := NextItem.SubItems[IdxSeq];
 | 
|---|
 | 1139 |       Seq2 := lvCover.Selected.SubItems[IdxSeq];
 | 
|---|
 | 1140 |       SetSeq(NextItem, Seq2);
 | 
|---|
 | 1141 |       SetSeq(lvCover.Selected, Seq1);
 | 
|---|
 | 1142 |       lvCover.CustomSort(nil, 0);
 | 
|---|
 | 1143 |       UpdateButtons;
 | 
|---|
 | 1144 |     end;
 | 
|---|
 | 1145 |   end;
 | 
|---|
 | 1146 | end;
 | 
|---|
 | 1147 | 
 | 
|---|
 | 1148 | procedure TfrmRemCoverSheet.SetSeq(Item: TListItem; const Value: string);
 | 
|---|
 | 1149 | var
 | 
|---|
 | 1150 |   tmpSL: TORStringList;
 | 
|---|
 | 1151 |   Idx: integer;
 | 
|---|
 | 1152 |   tmp: string;
 | 
|---|
 | 1153 | 
 | 
|---|
 | 1154 | begin
 | 
|---|
 | 1155 |   tmpSL := GetCurrent(FEditingIEN, FEditingLevel, FALSE);
 | 
|---|
 | 1156 |   if assigned(tmpSL) then
 | 
|---|
 | 1157 |   begin
 | 
|---|
 | 1158 |     Idx := GetIndex(tmpSL, Item);
 | 
|---|
 | 1159 |     if Idx >= 0 then
 | 
|---|
 | 1160 |     begin
 | 
|---|
 | 1161 |       tmp := tmpSL[idx];
 | 
|---|
 | 1162 |       if(Piece(Tmp,U,1) <> Value) then
 | 
|---|
 | 1163 |       begin
 | 
|---|
 | 1164 |         SetPiece(tmp,U,1,Value);
 | 
|---|
 | 1165 |         tmpSL[idx] := tmp;
 | 
|---|
 | 1166 |         MarkListAsChanged;
 | 
|---|
 | 1167 |         SetupItem(Item, tmp);
 | 
|---|
 | 1168 |       end;
 | 
|---|
 | 1169 |     end;
 | 
|---|
 | 1170 |   end;
 | 
|---|
 | 1171 | end;
 | 
|---|
 | 1172 | 
 | 
|---|
 | 1173 | procedure TfrmRemCoverSheet.sbCopyRightClick(Sender: TObject);
 | 
|---|
 | 1174 | var
 | 
|---|
 | 1175 |   i: integer;
 | 
|---|
 | 1176 |   Seq, Cur, Idx: integer;
 | 
|---|
 | 1177 |   tmpSL: TORStringList;
 | 
|---|
 | 1178 |   IEN: string;
 | 
|---|
 | 1179 | 
 | 
|---|
 | 1180 | begin
 | 
|---|
 | 1181 |   if assigned(tvAll.Selected) then
 | 
|---|
 | 1182 |   begin
 | 
|---|
 | 1183 |     IEN := Piece(TORTreeNode(tvAll.Selected).StringData, U, 1);
 | 
|---|
 | 1184 |     if ListHasData(IEN, IdxIEN) then
 | 
|---|
 | 1185 |     begin
 | 
|---|
 | 1186 |       ShowMessage('List already contains this Reminder');
 | 
|---|
 | 1187 |       exit;
 | 
|---|
 | 1188 |     end;
 | 
|---|
 | 1189 |     if lvCover.Items.Count = 0 then
 | 
|---|
 | 1190 |       Seq := 10
 | 
|---|
 | 1191 |     else
 | 
|---|
 | 1192 |     begin
 | 
|---|
 | 1193 |       Seq := 0;
 | 
|---|
 | 1194 |       for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 1195 |       begin
 | 
|---|
 | 1196 |         Cur := StrToIntDef(lvCover.Items[i].SubItems[IdxSeq], 0);
 | 
|---|
 | 1197 |         if Seq < Cur then
 | 
|---|
 | 1198 |           Seq := Cur;
 | 
|---|
 | 1199 |       end;
 | 
|---|
 | 1200 |       inc(Seq,10);
 | 
|---|
 | 1201 |       if Seq > 999 then
 | 
|---|
 | 1202 |       begin
 | 
|---|
 | 1203 |         Seq := 999;
 | 
|---|
 | 1204 |         while (Seq > 0) and ListHasData(IntToStr(Seq), IdxSeq) do dec(Seq);
 | 
|---|
 | 1205 |       end;
 | 
|---|
 | 1206 |     end;
 | 
|---|
 | 1207 |     if Seq > 0 then
 | 
|---|
 | 1208 |     begin
 | 
|---|
 | 1209 |       tmpSL := GetCurrent(FEditingIEN, FEditingLevel, FALSE, TRUE);
 | 
|---|
 | 1210 |       Idx := tmpSL.IndexOfPiece(IEN,U,2);
 | 
|---|
 | 1211 |       if Idx < 0 then
 | 
|---|
 | 1212 |       begin
 | 
|---|
 | 1213 |         tmpSL.Add(IntToStr(Seq) + U + CVAddCode + TORTreeNode(tvAll.Selected).StringData);
 | 
|---|
 | 1214 |         MarkListAsChanged;
 | 
|---|
 | 1215 |         UpdateMasterListView;
 | 
|---|
 | 1216 |         for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 1217 |           if IEN = lvCover.Items[i].SubItems[IdxIEN] then
 | 
|---|
 | 1218 |           begin
 | 
|---|
 | 1219 |             lvCover.Selected := lvCover.Items[i];
 | 
|---|
 | 1220 |             break;
 | 
|---|
 | 1221 |           end;
 | 
|---|
 | 1222 |       end;
 | 
|---|
 | 1223 |     end;
 | 
|---|
 | 1224 |   end;
 | 
|---|
 | 1225 | end;
 | 
|---|
 | 1226 | 
 | 
|---|
 | 1227 | function TfrmRemCoverSheet.ListHasData(Seq: string; SubIdx: integer): boolean;
 | 
|---|
 | 1228 | var
 | 
|---|
 | 1229 |   i: integer;
 | 
|---|
 | 1230 | 
 | 
|---|
 | 1231 | begin
 | 
|---|
 | 1232 |   Result := FALSE;
 | 
|---|
 | 1233 |   for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 1234 |     if Seq = lvCover.Items[i].SubItems[SubIdx] then
 | 
|---|
 | 1235 |     begin
 | 
|---|
 | 1236 |       Result := TRUE;
 | 
|---|
 | 1237 |       break;
 | 
|---|
 | 1238 |     end;
 | 
|---|
 | 1239 | end;
 | 
|---|
 | 1240 | 
 | 
|---|
 | 1241 | procedure TfrmRemCoverSheet.udSeqChangingEx(Sender: TObject;
 | 
|---|
 | 1242 |   var AllowChange: Boolean; NewValue: Smallint;
 | 
|---|
 | 1243 |   Direction: TUpDownDirection);
 | 
|---|
 | 1244 | begin
 | 
|---|
 | 1245 |   if FUpdating or (not FInitialized) then exit;
 | 
|---|
 | 1246 |   if ListHasData(IntToStr(NewValue), IdxSeq) then
 | 
|---|
 | 1247 |   begin
 | 
|---|
 | 1248 |     AllowChange := FALSE;
 | 
|---|
 | 1249 |     case Direction of
 | 
|---|
 | 1250 |       updUp:   udSeq.Position := NewValue + 1;
 | 
|---|
 | 1251 |       updDown: udSeq.Position := NewValue - 1;
 | 
|---|
 | 1252 |     end;
 | 
|---|
 | 1253 |   end;
 | 
|---|
 | 1254 | end;
 | 
|---|
 | 1255 | 
 | 
|---|
 | 1256 | procedure TfrmRemCoverSheet.sbCopyLeftClick(Sender: TObject);
 | 
|---|
 | 1257 | var
 | 
|---|
 | 1258 |   idx, Index, i: integer;
 | 
|---|
 | 1259 |   tmpSL: TORStringList;
 | 
|---|
 | 1260 | 
 | 
|---|
 | 1261 | begin
 | 
|---|
 | 1262 |   if assigned(lvCover.Selected) then
 | 
|---|
 | 1263 |   begin
 | 
|---|
 | 1264 |     tmpSL := GetCurrent(FEditingIEN, FEditingLevel, FALSE);
 | 
|---|
 | 1265 |     if assigned(tmpSL) then
 | 
|---|
 | 1266 |     begin
 | 
|---|
 | 1267 |       Idx := GetIndex(tmpSL, lvCover.Selected);
 | 
|---|
 | 1268 |       Index := lvCover.Selected.Index;
 | 
|---|
 | 1269 |       if Idx >= 0 then
 | 
|---|
 | 1270 |       begin
 | 
|---|
 | 1271 |         tmpSL.Delete(Idx);
 | 
|---|
 | 1272 |         MarkListAsChanged;
 | 
|---|
 | 1273 |         UpdateMasterListView;
 | 
|---|
 | 1274 |         if lvCover.Items.Count > 0 then
 | 
|---|
 | 1275 |         begin
 | 
|---|
 | 1276 |           if Index > 0 then
 | 
|---|
 | 1277 |             dec(Index);
 | 
|---|
 | 1278 |           for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 1279 |             if lvCover.Items[i].Index = Index then
 | 
|---|
 | 1280 |             begin
 | 
|---|
 | 1281 |               lvCover.Selected := lvCover.Items[i];
 | 
|---|
 | 1282 |               break;
 | 
|---|
 | 1283 |             end;
 | 
|---|
 | 1284 |         end;
 | 
|---|
 | 1285 |       end;
 | 
|---|
 | 1286 |     end;
 | 
|---|
 | 1287 |   end;
 | 
|---|
 | 1288 | end;
 | 
|---|
 | 1289 | 
 | 
|---|
 | 1290 | procedure TfrmRemCoverSheet.tvAllDblClick(Sender: TObject);
 | 
|---|
 | 1291 | begin
 | 
|---|
 | 1292 |   if sbCopyRight.Enabled then
 | 
|---|
 | 1293 |     sbCopyRight.Click;
 | 
|---|
 | 1294 | end;
 | 
|---|
 | 1295 | 
 | 
|---|
 | 1296 | procedure TfrmRemCoverSheet.btnApplyClick(Sender: TObject);
 | 
|---|
 | 1297 | begin
 | 
|---|
 | 1298 |   SaveData(TRUE);
 | 
|---|
 | 1299 |   btnApply.Enabled := FALSE;
 | 
|---|
 | 1300 | end;
 | 
|---|
 | 1301 | 
 | 
|---|
 | 1302 | procedure TfrmRemCoverSheet.btnOKClick(Sender: TObject);
 | 
|---|
 | 1303 | begin
 | 
|---|
 | 1304 |   SaveData(FALSE);
 | 
|---|
 | 1305 | end;
 | 
|---|
 | 1306 | 
 | 
|---|
 | 1307 | procedure TfrmRemCoverSheet.SaveData(FromApply: boolean);
 | 
|---|
 | 1308 | var
 | 
|---|
 | 1309 |   i, j: integer;
 | 
|---|
 | 1310 |   tmpSL: TORStringList;
 | 
|---|
 | 1311 |   DeleteIt, DoRefresh: boolean;
 | 
|---|
 | 1312 |   Level, lvl: TRemCoverDataLevel;
 | 
|---|
 | 1313 |   ALevel, AClass, Code, IEN: string;
 | 
|---|
 | 1314 | 
 | 
|---|
 | 1315 | begin
 | 
|---|
 | 1316 |   DoRefresh := FALSE;
 | 
|---|
 | 1317 |   i := 0;
 | 
|---|
 | 1318 |   while (i < FData.Count) do
 | 
|---|
 | 1319 |   begin
 | 
|---|
 | 1320 |     DeleteIt := FALSE;
 | 
|---|
 | 1321 |     if(Piece(FData[i],U,2) = BoolChar[TRUE]) then
 | 
|---|
 | 1322 |     begin
 | 
|---|
 | 1323 |       tmpSL := TORStringList(FData.Objects[i]);
 | 
|---|
 | 1324 |       if assigned(tmpSL) then
 | 
|---|
 | 1325 |       begin
 | 
|---|
 | 1326 |         Level := dlPackage;
 | 
|---|
 | 1327 |         Code := copy(FData[i],1,1);
 | 
|---|
 | 1328 |         for lvl := low(TRemCoverDataLevel) to high(TRemCoverDataLevel) do
 | 
|---|
 | 1329 |         begin
 | 
|---|
 | 1330 |           if DataCode[lvl] = Code then
 | 
|---|
 | 1331 |           begin
 | 
|---|
 | 1332 |             Level := lvl;
 | 
|---|
 | 1333 |             break;
 | 
|---|
 | 1334 |           end;
 | 
|---|
 | 1335 |         end;
 | 
|---|
 | 1336 |         if Level <> dlPackage then
 | 
|---|
 | 1337 |         begin
 | 
|---|
 | 1338 |           IEN := copy(Piece(FData[i],U,1),2,MaxInt);
 | 
|---|
 | 1339 |           ALevel := InternalName[Level];
 | 
|---|
 | 1340 |           ACLass := '';
 | 
|---|
 | 1341 |           case Level of
 | 
|---|
 | 1342 |             dlDivision, dlService, dlLocation, dlUser:
 | 
|---|
 | 1343 |               ALevel := ALevel + '.`' + IEN;
 | 
|---|
 | 1344 |             dlUserClass:
 | 
|---|
 | 1345 |               AClass := IEN;
 | 
|---|
 | 1346 |           end;
 | 
|---|
 | 1347 |           for j := 0 to tmpSL.Count-1 do
 | 
|---|
 | 1348 |             tmpSL[j] := pieces(tmpSL[j],U,1,2);
 | 
|---|
 | 1349 |           SetCoverSheetLevelData(ALevel, AClass, tmpSL);
 | 
|---|
 | 1350 |           tmpSL.Free;
 | 
|---|
 | 1351 |           DeleteIt := TRUE;
 | 
|---|
 | 1352 |           FDataSaved := TRUE;
 | 
|---|
 | 1353 |           DoRefresh := TRUE;
 | 
|---|
 | 1354 |         end;
 | 
|---|
 | 1355 |       end;
 | 
|---|
 | 1356 |     end;
 | 
|---|
 | 1357 |     if DeleteIt then
 | 
|---|
 | 1358 |       FData.Delete(i)
 | 
|---|
 | 1359 |     else
 | 
|---|
 | 1360 |       inc(i);
 | 
|---|
 | 1361 |   end;
 | 
|---|
 | 1362 |   if FromApply and DoRefresh then
 | 
|---|
 | 1363 |     UpdateMasterListView;
 | 
|---|
 | 1364 | end;
 | 
|---|
 | 1365 | 
 | 
|---|
 | 1366 | procedure TfrmRemCoverSheet.lvCoverDblClick(Sender: TObject);
 | 
|---|
 | 1367 | begin
 | 
|---|
 | 1368 |   if sbCopyLeft.Enabled then
 | 
|---|
 | 1369 |     sbCopyLeft.Click;
 | 
|---|
 | 1370 | end;
 | 
|---|
 | 1371 | 
 | 
|---|
 | 1372 | procedure TfrmRemCoverSheet.lvViewClick(Sender: TObject);
 | 
|---|
 | 1373 | var
 | 
|---|
 | 1374 |   lvl: TRemCoverDataLevel;
 | 
|---|
 | 1375 |   i: integer;
 | 
|---|
 | 1376 |   ClsName, TIEN, IEN, lvlName: string;
 | 
|---|
 | 1377 |   ok: boolean;
 | 
|---|
 | 1378 | 
 | 
|---|
 | 1379 | begin
 | 
|---|
 | 1380 |   if assigned(lvView.Selected) and (not FUpdatingView) then
 | 
|---|
 | 1381 |   begin
 | 
|---|
 | 1382 |     FUpdatingView := TRUE;
 | 
|---|
 | 1383 |     try
 | 
|---|
 | 1384 |       lvl := TRemCoverDataLevel(StrToIntDef(lvView.Selected.SubItems[IdxLvl2],ord(dlUser)));
 | 
|---|
 | 1385 |       IEN := lvView.Selected.SubItems[IdxIEN];
 | 
|---|
 | 1386 |       lvlName := lvView.Selected.SubItems[IdxLvl];
 | 
|---|
 | 1387 |       TIEN := lvView.Selected.SubItems[IdxTIEN];
 | 
|---|
 | 1388 |       ClsName := lvView.Selected.SubItems[IdxType];
 | 
|---|
 | 1389 |       ok := (lvl <> FEditingLevel);
 | 
|---|
 | 1390 |       if(not ok) and (lvl = dlUserClass) then
 | 
|---|
 | 1391 |         ok := (FEditingIEN <> StrToIntDef(TIEN,0));
 | 
|---|
 | 1392 |       if (not FUserMode) and ok and (lvl <> dlPackage) then
 | 
|---|
 | 1393 |       begin
 | 
|---|
 | 1394 |         case lvl of
 | 
|---|
 | 1395 |           dlSystem:    FUpdatePending := cbSystem;
 | 
|---|
 | 1396 |           dlDivision:  FUpdatePending := cbDivision;
 | 
|---|
 | 1397 |           dlService:   FUpdatePending := cbService;
 | 
|---|
 | 1398 |           dlLocation:  FUpdatePending := cbLocation;
 | 
|---|
 | 1399 |           dlUserClass: FUpdatePending := cbUserClass;
 | 
|---|
 | 1400 |           dlUser:      FUpdatePending := cbUser;
 | 
|---|
 | 1401 |         end;
 | 
|---|
 | 1402 |         if lvl = dlUserClass then
 | 
|---|
 | 1403 |         begin
 | 
|---|
 | 1404 |           cbxClass.InitLongList(ClsName);
 | 
|---|
 | 1405 |           cbxClass.SelectByID(TIEN);
 | 
|---|
 | 1406 |           FCurClass := cbxClass.ItemIEN;
 | 
|---|
 | 1407 |         end;
 | 
|---|
 | 1408 |         cbxDropDownClose(nil);
 | 
|---|
 | 1409 |       end;
 | 
|---|
 | 1410 |       if (lvl = FEditingLevel) then
 | 
|---|
 | 1411 |       begin
 | 
|---|
 | 1412 |         for i := 0 to lvCover.Items.Count-1 do
 | 
|---|
 | 1413 |           if IEN = lvCover.Items[i].SubItems[IdxIEN] then
 | 
|---|
 | 1414 |           begin
 | 
|---|
 | 1415 |             lvCover.Selected := lvCover.Items[i];
 | 
|---|
 | 1416 |             break;
 | 
|---|
 | 1417 |           end;
 | 
|---|
 | 1418 |       end;
 | 
|---|
 | 1419 |       for i := 0 to lvView.Items.Count-1 do
 | 
|---|
 | 1420 |       begin
 | 
|---|
 | 1421 |         if (IEN = lvView.Items[i].SubItems[IdxIEN]) and
 | 
|---|
 | 1422 |            (lvlName = lvView.Items[i].SubItems[IdxLvl]) then
 | 
|---|
 | 1423 |         begin
 | 
|---|
 | 1424 |           lvView.Selected := lvView.Items[i];
 | 
|---|
 | 1425 |           break;
 | 
|---|
 | 1426 |         end;
 | 
|---|
 | 1427 |       end;
 | 
|---|
 | 1428 |     finally
 | 
|---|
 | 1429 |       FUpdatingView := FALSE;
 | 
|---|
 | 1430 |     end;
 | 
|---|
 | 1431 |   end;
 | 
|---|
 | 1432 | end;
 | 
|---|
 | 1433 | 
 | 
|---|
 | 1434 | function TfrmRemCoverSheet.RPad(Str: String): String;
 | 
|---|
 | 1435 | begin
 | 
|---|
 | 1436 |   Result := StringOfChar('0',7-length(Str)) + Str;
 | 
|---|
 | 1437 | end;
 | 
|---|
 | 1438 | 
 | 
|---|
 | 1439 | procedure TfrmRemCoverSheet.btnViewClick(Sender: TObject);
 | 
|---|
 | 1440 | var
 | 
|---|
 | 1441 |   frmRemCoverPreview: TfrmRemCoverPreview;
 | 
|---|
 | 1442 |   CurSortOrder: integer;
 | 
|---|
 | 1443 |   CurSortDir: boolean;
 | 
|---|
 | 1444 |   i, idx, SeqCnt: integer;
 | 
|---|
 | 1445 |   Lvl, LastLvl, tmp, AddCode, IEN, Seq, SortID: string;
 | 
|---|
 | 1446 |   RemList, LvlList: TORStringList; // IEN^Name^Seq^SortID^Locked
 | 
|---|
 | 1447 |   ANode: TTreeNode;
 | 
|---|
 | 1448 | 
 | 
|---|
 | 1449 |   procedure GetAllChildren(PNode: TTreeNode; const ASeq, ASortID: string);
 | 
|---|
 | 1450 |   var
 | 
|---|
 | 1451 |     Node: TTreeNode;
 | 
|---|
 | 1452 | 
 | 
|---|
 | 1453 |   begin
 | 
|---|
 | 1454 |     PNode.Expand(FALSE);
 | 
|---|
 | 1455 |     Node := PNode.GetFirstChild;
 | 
|---|
 | 1456 |     while assigned(Node) do
 | 
|---|
 | 1457 |     begin
 | 
|---|
 | 1458 |       tmp := TORTreeNode(Node).StringData;
 | 
|---|
 | 1459 |       if copy(tmp,1,1) = CVCatCode then
 | 
|---|
 | 1460 |         GetAllChildren(Node, ASeq, ASortID)
 | 
|---|
 | 1461 |       else
 | 
|---|
 | 1462 |       begin
 | 
|---|
 | 1463 |         if RemList.IndexOfPiece(Piece(tmp,u,1)) < 0 then
 | 
|---|
 | 1464 |         begin
 | 
|---|
 | 1465 |           SetPiece(tmp,u,3,ASeq);
 | 
|---|
 | 1466 |           inc(SeqCnt);
 | 
|---|
 | 1467 |           SortID := copy(ASortID,1,7) + RPad(IntToStr(SeqCnt)) + copy(ASortID,15,MaxInt);
 | 
|---|
 | 1468 |           SetPiece(tmp,u,4,SortID);
 | 
|---|
 | 1469 |           RemList.Add(tmp);
 | 
|---|
 | 1470 |         end;
 | 
|---|
 | 1471 |       end;
 | 
|---|
 | 1472 |       Node := Node.GetNextSibling;
 | 
|---|
 | 1473 |     end;
 | 
|---|
 | 1474 |   end;
 | 
|---|
 | 1475 | 
 | 
|---|
 | 1476 | begin
 | 
|---|
 | 1477 |   frmRemCoverPreview := TfrmRemCoverPreview.Create(Application);
 | 
|---|
 | 1478 |   try
 | 
|---|
 | 1479 |     CurSortOrder := FTopSortTag;
 | 
|---|
 | 1480 |     CurSortDir := FTopSortUp;
 | 
|---|
 | 1481 |     lvView.Items.BeginUpdate;
 | 
|---|
 | 1482 |     try
 | 
|---|
 | 1483 |       FTopSortTag := 3;
 | 
|---|
 | 1484 |       FTopSortUp := TRUE;
 | 
|---|
 | 1485 |       lvView.CustomSort(nil, 0);
 | 
|---|
 | 1486 |       RemList := TORStringList.Create;
 | 
|---|
 | 1487 |       try
 | 
|---|
 | 1488 |         LvlList := TORStringList.Create;
 | 
|---|
 | 1489 |         try
 | 
|---|
 | 1490 |           LastLvl := '';
 | 
|---|
 | 1491 |           for i := 0 to lvView.Items.Count-1 do
 | 
|---|
 | 1492 |           begin
 | 
|---|
 | 1493 |             Lvl := lvView.Items[i].SubItems[IdxLvl2];
 | 
|---|
 | 1494 |             if LvL <> LastLvl then
 | 
|---|
 | 1495 |             begin
 | 
|---|
 | 1496 |               RemList.AddStrings(LvlList);
 | 
|---|
 | 1497 |               LvlList.Clear;
 | 
|---|
 | 1498 |               LastLvl := Lvl;
 | 
|---|
 | 1499 |             end;
 | 
|---|
 | 1500 |             IEN := lvView.Items[i].SubItems[IdxIEN];
 | 
|---|
 | 1501 |             AddCode := lvView.Items[i].SubItems[IdxAdd];
 | 
|---|
 | 1502 |             idx := RemList.IndexOfPiece(IEN);
 | 
|---|
 | 1503 |             if AddCode = CVRemoveCode then
 | 
|---|
 | 1504 |             begin
 | 
|---|
 | 1505 |               if(idx >= 0) and (piece(RemList[idx],U,5) <> '1') then
 | 
|---|
 | 1506 |                 RemList.Delete(idx);
 | 
|---|
 | 1507 |             end
 | 
|---|
 | 1508 |             else
 | 
|---|
 | 1509 |             begin
 | 
|---|
 | 1510 |               if idx < 0 then
 | 
|---|
 | 1511 |               begin
 | 
|---|
 | 1512 |                 Seq := lvView.Items[i].SubItems[IdxSeq];
 | 
|---|
 | 1513 |                 SortID := RPad(Seq) + '0000000' + lvl + copy(lvView.Items[i].SubItems[IdxTIEN] + '0000000000',1,10);
 | 
|---|
 | 1514 |                 tmp := IEN + U + lvView.Items[i].Caption + U + Seq + U + SortID;
 | 
|---|
 | 1515 |                 if AddCode = CVLockCode then
 | 
|---|
 | 1516 |                   tmp := tmp + U + '1';
 | 
|---|
 | 1517 |                 RemList.Add(tmp);
 | 
|---|
 | 1518 |               end
 | 
|---|
 | 1519 |               else
 | 
|---|
 | 1520 |               if (AddCode = CVLockCode) and (piece(RemList[idx],U,5) <> '1') then
 | 
|---|
 | 1521 |               begin
 | 
|---|
 | 1522 |                 tmp := RemList[idx];
 | 
|---|
 | 1523 |                 SetPiece(tmp,U,5,'1');
 | 
|---|
 | 1524 |                 RemList[idx] := tmp;
 | 
|---|
 | 1525 |               end;
 | 
|---|
 | 1526 |             end;
 | 
|---|
 | 1527 |           end;
 | 
|---|
 | 1528 |           RemList.AddStrings(LvlList);
 | 
|---|
 | 1529 |           FTopSortTag := CurSortOrder;
 | 
|---|
 | 1530 |           FTopSortUp := CurSortDir;
 | 
|---|
 | 1531 |           lvView.CustomSort(nil, 0);
 | 
|---|
 | 1532 | 
 | 
|---|
 | 1533 |           LvlList.Clear;
 | 
|---|
 | 1534 |           LvlList.Assign(RemList);
 | 
|---|
 | 1535 |           RemList.Clear;
 | 
|---|
 | 1536 |           FInternalExpansion := TRUE;
 | 
|---|
 | 1537 |           try
 | 
|---|
 | 1538 |             for i := 0 to LvlList.Count-1 do
 | 
|---|
 | 1539 |             begin
 | 
|---|
 | 1540 |               IEN := piece(LvlList[i],U,1);
 | 
|---|
 | 1541 |               if (copy(LvlList[i],1,1) = CVCatCode) then
 | 
|---|
 | 1542 |               begin
 | 
|---|
 | 1543 |                 ANode := tvAll.Items.GetFirstNode;
 | 
|---|
 | 1544 |                 while assigned(ANode) do
 | 
|---|
 | 1545 |                 begin
 | 
|---|
 | 1546 |                   if IEN = piece(TORTreeNode(ANode).StringData,U,1) then
 | 
|---|
 | 1547 |                   begin
 | 
|---|
 | 1548 |                     SeqCnt := 0;
 | 
|---|
 | 1549 |                     GetAllChildren(ANode, Piece(LvlList[i], U, 3), Piece(LvlList[i], U, 4));
 | 
|---|
 | 1550 |                     ANode := nil;
 | 
|---|
 | 1551 |                   end
 | 
|---|
 | 1552 |                   else
 | 
|---|
 | 1553 |                     ANode := ANode.GetNextSibling;
 | 
|---|
 | 1554 |                 end;
 | 
|---|
 | 1555 |               end
 | 
|---|
 | 1556 |               else
 | 
|---|
 | 1557 |               if RemList.IndexOfPiece(IEN) < 0 then
 | 
|---|
 | 1558 |                 RemList.Add(LvlList[i]);
 | 
|---|
 | 1559 |             end;
 | 
|---|
 | 1560 |           finally
 | 
|---|
 | 1561 |             FInternalExpansion := FALSE;
 | 
|---|
 | 1562 |           end;
 | 
|---|
 | 1563 |         finally
 | 
|---|
 | 1564 |           LvlList.Free;
 | 
|---|
 | 1565 |         end;
 | 
|---|
 | 1566 | 
 | 
|---|
 | 1567 |         RemList.SortByPiece(4);
 | 
|---|
 | 1568 |         for i := 0 to RemList.Count-1 do
 | 
|---|
 | 1569 |         begin
 | 
|---|
 | 1570 |           with frmRemCoverPreview.lvMain.Items.Add do
 | 
|---|
 | 1571 |           begin
 | 
|---|
 | 1572 |             tmp := RemList[i];
 | 
|---|
 | 1573 |             Caption := Piece(tmp, U, 2);
 | 
|---|
 | 1574 |             SubItems.Add(Piece(tmp, U, 3));
 | 
|---|
 | 1575 |             SubItems.Add(Piece(tmp, U, 4));
 | 
|---|
 | 1576 |           end;
 | 
|---|
 | 1577 |         end;
 | 
|---|
 | 1578 |       finally
 | 
|---|
 | 1579 |         RemList.Free;
 | 
|---|
 | 1580 |       end;
 | 
|---|
 | 1581 |     finally
 | 
|---|
 | 1582 |       lvView.Items.EndUpdate;
 | 
|---|
 | 1583 |     end;
 | 
|---|
 | 1584 |     frmRemCoverPreview.ShowModal;
 | 
|---|
 | 1585 |   finally
 | 
|---|
 | 1586 |     frmRemCoverPreview.Free;
 | 
|---|
 | 1587 |   end;
 | 
|---|
 | 1588 | end;
 | 
|---|
 | 1589 | 
 | 
|---|
 | 1590 | procedure TfrmRemCoverSheet.lvCoverKeyDown(Sender: TObject; var Key: Word;
 | 
|---|
 | 1591 |   Shift: TShiftState);
 | 
|---|
 | 1592 | begin
 | 
|---|
 | 1593 |   if (Key = VK_DELETE) and sbCopyLeft.Enabled then
 | 
|---|
 | 1594 |     sbCopyLeft.Click; 
 | 
|---|
 | 1595 | end;
 | 
|---|
 | 1596 | 
 | 
|---|
 | 1597 | procedure TfrmRemCoverSheet.edtSeqKeyPress(Sender: TObject; var Key: Char);
 | 
|---|
 | 1598 | begin
 | 
|---|
 | 1599 |   if (Key < '0') or (Key > '9') then
 | 
|---|
 | 1600 |     Key := #0; 
 | 
|---|
 | 1601 | end;
 | 
|---|
 | 1602 | 
 | 
|---|
 | 1603 | procedure TfrmRemCoverSheet.cbxDivisionKeyDown(Sender: TObject;
 | 
|---|
 | 1604 |   var Key: Word; Shift: TShiftState);
 | 
|---|
 | 1605 | begin
 | 
|---|
 | 1606 |   if (Key = VK_RETURN) and TORComboBox(Sender).DroppedDown then 
 | 
|---|
 | 1607 |     TORComboBox(Sender).DroppedDown := FALSE; 
 | 
|---|
 | 1608 | end;
 | 
|---|
 | 1609 | 
 | 
|---|
 | 1610 | function TfrmRemCoverSheet.GetCoverSheetLvlData(ALevel,
 | 
|---|
 | 1611 |   AClass: string): TStrings;
 | 
|---|
 | 1612 | var
 | 
|---|
 | 1613 |   IEN: string;
 | 
|---|
 | 1614 |   i, j: integer;
 | 
|---|
 | 1615 | 
 | 
|---|
 | 1616 | begin
 | 
|---|
 | 1617 |   Result := GetCoverSheetLevelData(ALevel, AClass);
 | 
|---|
 | 1618 |   for i := 0 to Result.Count-1 do
 | 
|---|
 | 1619 |   begin
 | 
|---|
 | 1620 |     IEN := copy(piece(Result[i],U,2),2,MaxInt);
 | 
|---|
 | 1621 |     j := FMasterList.IndexOfPiece(IEN);
 | 
|---|
 | 1622 |     if j >= 0 then
 | 
|---|
 | 1623 |       Result[i] := Result[i] + piece(FMasterList[j],U,3);
 | 
|---|
 | 1624 |   end;
 | 
|---|
 | 1625 | end;
 | 
|---|
 | 1626 | 
 | 
|---|
 | 1627 | end.
 | 
|---|