unit U_LabSet;

interface

uses
  Windows, Messages, StrUtils, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, cxGraphics, cxCustomData, cxStyles, cxTL, cxMaskEdit, DB,
  ADODB, cxInplaceContainer, cxDBTL, cxControls, cxTLData, ComCtrls, ToolWin,
  StdCtrls, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, DBClient,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, ExtCtrls,
  cxSplitter, cxGridLevel, cxClasses, cxGridCustomView, cxGrid,
  cxGridCustomPopupMenu, cxGridPopupMenu, RM_Dataset, RM_System, RM_Common,
  RM_Class, RM_GridReport, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdFTP, ShellAPI, IniFiles, cxCheckBox, cxCalendar, cxButtonEdit,
  cxTextEdit, cxDropDownEdit, BtnEdit, cxLookAndFeels, cxLookAndFeelPainters,
  cxNavigator, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges,
  dxBarBuiltInMenu, U_BaseList, cxContainer, dxCore, cxDateUtils, cxImage,
  cxDBEdit, IdExplicitTLSClientServerBase, RM_Preview, cxPC, U_BaseHelp,
  System.ImageList, Vcl.ImgList, RTComboBox, RM_BarCode, RM_e_Xls,
  dxScrollbarAnnotations;

type
  TfrmLabSet = class(TfrmBaseHelp)
    ToolBar1: TToolBar;
    TBClose: TToolButton;
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    ToolButton3: TToolButton;
    ScrollBox1: TScrollBox;
    Label14: TLabel;
    Label1: TLabel;
    cxPageControl1: TcxPageControl;
    cxTabSheet4: TcxTabSheet;
    RMPreview1: TRMPreview;
    Label2: TLabel;
    RuleBeforeTare: TEdit;
    RuleConversion: TComboBox;
    Label3: TLabel;
    Coefficient: TEdit;
    Label4: TLabel;
    ADOQueryLabel: TADOQuery;
    RM1: TRMGridReport;
    RMDB_1: TRMDBDataSet;
    ADO_1: TADOQuery;
    RM2: TRMGridReport;
    RMDB_2: TRMDBDataSet;
    cxTabSheet1: TcxTabSheet;
    DS_Label: TDataSource;
    CDS_Label: TClientDataSet;
    RMDB_Label: TRMDBDataSet;
    RMLabel: TRMGridReport;
    Panel1: TPanel;
    Panel2: TPanel;
    cxGridLabel: TcxGrid;
    TVLabel: TcxGridDBTableView;
    TVLabellabelId: TcxGridDBColumn;
    TVLabellabeltype: TcxGridDBColumn;
    TVLabellabelCaption: TcxGridDBColumn;
    TVLabellabelFile: TcxGridDBColumn;
    cxGridLabelLevel1: TcxGridLevel;
    RMPreview3: TRMPreview;
    Panel4: TPanel;
    Label9: TLabel;
    Label10: TLabel;
    LabelCaption: TEdit;
    ToolBar2: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    Tadd: TToolButton;
    Tupd: TToolButton;
    Tdel: TToolButton;
    ToolButton4: TToolButton;
    RMBarCodeObject1: TRMBarCodeObject;
    RMXLSExport1: TRMXLSExport;
    RMDataDictionary1: TRMDataDictionary;
    ADO_Down: TADOQuery;
    TVLabelColumn1: TcxGridDBColumn;
    TVLabelColumn2: TcxGridDBColumn;
    LabVolume: TEdit;
    LabPackage: TEdit;
    Label5: TLabel;
    RulePieceNo: TComboBox;
    Label6: TLabel;
    RuleLenUnit: TComboBox;
    Label8: TLabel;
    RuleLaterTare: TEdit;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    labeltype: TComboBox;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure cxPageControl1Change(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure TdelClick(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure labeltypeChange(Sender: TObject);
    procedure TVLabelCellClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
    procedure ToolButton5Click(Sender: TObject);
    procedure TaddClick(Sender: TObject);
    procedure TupdClick(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
  private
    { Private declarations }
    procedure InitGrid();
    function SaveData(): Boolean;
    procedure InitLabel();
    function SaveLabel(MLabelID: string): Boolean;
    procedure InitLabVolume();
    procedure InitLabPackage();
  public
    FDataID, FAuthority: string;
  end;

var
  frmLabSet: TfrmLabSet;

implementation

uses
  U_DataLink, U_RTFun, U_LabelInput, U_LabelList;

{$R *.dfm}

function TfrmLabSet.SaveLabel(MLabelID: string): Boolean;
begin
  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      close;
      sql.Clear;
      sql.Add('select * from Trade_Label');
      sql.Add('where LabelID=' + Quotedstr(MLabelID));
      Open;
      Edit;
      fieldByName('Editer').value := DName;
      FieldByName('EditTime').Value := SGetServerDateTime(ADOQueryTemp);
//      RMLabel.SaveToBlobField(TBlobField(FieldByName('LabelFile')));
      Post;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    result := true;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Result := false;
    application.MessageBox('�����ǩģ�����!', '������Ϣ', 0);
  end;
end;

procedure TfrmLabSet.InitLabel();
begin
  with ADOQueryMain do
  begin
    close;
    sql.Clear;
    sql.Add(' select * from Trade_Label');
    if FAuthority = '����ҵ��' then
    begin
      sql.Add('where (Filler =''' + trim(DName) + ''') or (LabelCaption in (''�κƱ�ǩ'',''ͨ�ñ�ǩ''))');
    end;

    sql.Add(' order by labeltype,labelCaption');
//    ShowMessage(sql.text);
    Open;
  end;
  SDofilter(ADOQueryMain, SGetFilters(Panel4, 1, 2));
  SCreateCDS(ADOQueryMain, CDS_Label);
  SInitCDSData(ADOQueryMain, CDS_Label);
end;

procedure TfrmLabSet.InitLabVolume();
begin

  with ADOQueryLabel do
  begin
    close;
    sql.Clear;
    sql.Add('select top 1 * from RT_FileUpdate');
    sql.Add('where FileName=' + quotedstr(trim(LabVolume.Text) + '.rmf'));
    Open;
  end;

  if ADOQueryLabel.IsEmpty then
    exit;
  with RM1 do
  begin
    LoadFromBlobField(tblobfield(ADOQueryLabel.fieldbyname('Files')));
    Preview := RMPreview1;
    ShowReport;
  end;

end;

procedure TfrmLabSet.InitLabPackage();
begin

end;

procedure TfrmLabSet.labeltypeChange(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel4, 1, 2));
    SCreateCDS(ADOQueryMain, CDS_Label);
    SInitCDSData(ADOQueryMain, CDS_Label);
  end;

end;

procedure TfrmLabSet.InitGrid();
begin

  with ADOQueryTemp do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select * from Trade_Cloth_Inspect_Rule where  RuleID=''' + Trim(FDataID) + '''');
    Open;
  end;
  SCSHData(ADOQueryTemp, ScrollBox1, 2);

end;

procedure TfrmLabSet.FormDestroy(Sender: TObject);
begin
  inherited;
  frmLabSet := nil;
end;

procedure TfrmLabSet.cxPageControl1Change(Sender: TObject);
begin
  case cxPageControl1.ActivePageIndex of
    1:
      begin
        InitLabVolume();
      end;
    2:
      begin
        InitLabPackage();
      end;
  end;
end;

procedure TfrmLabSet.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

procedure TfrmLabSet.TaddClick(Sender: TObject);
begin
  try
    frmLabelInput := TfrmLabelInput.create(self);
    with frmLabelInput do
    begin
      FLabelId := '';
      if showModal = 1 then
      begin
        InitLabel();
      end;
    end;
  finally
    frmLabelInput.Free;
  end;
end;

procedure TfrmLabSet.TBCloseClick(Sender: TObject);
begin
  ModalResult := 1;
end;

procedure TfrmLabSet.FormShow(Sender: TObject);
begin
  inherited;
  ExportFtErpFile('ģ���ǩ.rmf', ADOQueryTemp);

  with ADO_1 do
  begin
    Close;
    SQL.Clear;
    sql.Add('exec P_BS_Label_Get_Test');
    Open;
  end;
  Initlabel();
  InitGrid();

end;

procedure TfrmLabSet.TBRafreshClick(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmLabSet.TdelClick(Sender: TObject);
var
  fPrintFile: string;
begin
  if CDS_Label.IsEmpty then
    exit;

  if (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '�κƱ�ǩ') or (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '��̧ͷ�κƱ�ǩ') then
  begin
    Application.MessageBox('���ܲ���ģ���ǩ!', '��ʾ', 0);
    Exit;
  end;

  if TRIM(DName) <> 'ADMIN' then
  begin
    if TRIM(CDS_Label.fieldByName('Filler').asString) <> TRIM(DName) then
    begin
      Application.MessageBox('���ܲ������˵�����!', '��ʾ', 0);
      Exit;
    end;
  end;

  if Application.MessageBox('ȷ��Ҫɾ��������', '��ʾ', 32 + 4) <> IDYES then
    Exit;

  try
    with ADOQueryCmd do
    begin
      close;
      sql.clear;
      sql.Add('delete Trade_Label');
      sql.Add('where labelId=' + quotedstr(CDS_Label.fieldByName('LabelID').asString));
      sql.Add('delete RT_FileUpdate');
      sql.Add('where FileName=' + quotedstr(trim(CDS_Label.fieldByName('labelCaption').asString) + '.rmf'));

      sql.Add('insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( ');
      sql.Add(' ' + quotedstr(trim(DName)));
      sql.Add(',getdate() ');
      sql.Add(',' + quotedstr(trim(self.Caption)));
      sql.Add(',' + quotedstr(trim('��ǩɾ��')));
      sql.Add(',' + quotedstr(trim('��ǩ���ƣ�' + trim(CDS_Label.fieldByName('labelCaption').asString))));
      sql.Add(',' + quotedstr(trim('�ɹ�')));
      sql.Add(')');
      execSql;
    end;

    fPrintFile := ExtractFilePath(Application.ExeName) + 'report\' + trim(CDS_Label.fieldByName('labelCaption').asString) + '.rmf';

    if FileExists(fPrintFile) then
    begin
      DeleteFile(fPrintFile);
    end;

    CDS_Label.Delete;
  except
    application.MessageBox('ɾ��ʧ��!', '������Ϣ', 0);
  end;
end;

function TfrmLabSet.SaveData(): Boolean;
var
  MaxId, MaxSubId, FCoCode, FCCID, MaxCFID: string;
begin
  try
    ADOQueryCmd.Connection.BeginTrans;

    if Trim(FDataID) = '' then
    begin
      if GetLSNo(ADOQueryCmd, MaxId, 'R', 'Trade_Cloth_Inspect_Rule', 4, 1) = False then
      begin
        Result := False;
        ADOQueryCmd.Connection.RollbackTrans;
        Application.MessageBox('ȡ����ʧ�ܣ�', '��ʾ', 0);
        Exit;
      end;
    end
    else
    begin
      MaxId := Trim(FDataID);
    end;

    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('select * from Trade_Cloth_Inspect_Rule where RuleID=''' + Trim(FDataID) + '''');
      Open;
    end;
    with ADOQueryCmd do
    begin
      if Trim(FDataID) = '' then
      begin
        Append;
        FieldByName('Filler').Value := Trim(DName);
      end
      else
      begin
        Edit;
        FieldByName('Editer').Value := Trim(DName);
        FieldByName('Edittime').Value := SGetServerDateTime(ADOQueryTemp);
      end;
      FieldByName('RuleID').Value := Trim(MaxId);
      RTSetsavedata(ADOQueryCmd, 'Trade_Cloth_Inspect_Rule', ScrollBox1, 2);

      Post;
    end;

    ADOQueryCmd.Connection.CommitTrans;
    FCCID := Trim(MaxSubId);
    Result := True;
  except
    Result := false;
    ADOQueryCmd.Connection.RollbackTrans;
    Application.MessageBox('�����쳣!', '��ʾ', 0);
  end;
end;

procedure TfrmLabSet.ToolButton1Click(Sender: TObject);
begin
  if CDS_Label.IsEmpty then
    exit;
  LabVolume.Text := trim(CDS_Label.fieldbyname('labelCaption').asstring);
end;

procedure TfrmLabSet.ToolButton2Click(Sender: TObject);
begin
  if CDS_Label.IsEmpty then
    exit;
  LabPackage.Text := trim(CDS_Label.fieldbyname('labelCaption').asstring);
end;

procedure TfrmLabSet.ToolButton3Click(Sender: TObject);
begin

  if SaveData() then
  begin
    Application.MessageBox('����ɹ�!', '��ʾ', 0);
  end;
end;

procedure TfrmLabSet.ToolButton4Click(Sender: TObject);
var
  fFileName, fPrintFile: string;
  MLabelID, MLabelCaption: string;
begin
  if CDS_Label.IsEmpty then
    exit;

  if (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '�κƱ�ǩ') or (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '��̧ͷ�κƱ�ǩ') then
  begin
    Application.MessageBox('���ܲ���ģ���ǩ!', '��ʾ', 0);
    Exit;
  end;

  MLabelID := TRIM(CDS_Label.fieldByName('LabelID').asString);
  MLabelCaption := TRIM(CDS_Label.fieldByName('LabelCaption').asString);
  ExportFtErpFile(MLabelCaption + '.rmf', ADOQueryTemp);
  fPrintFile := ExtractFilePath(Application.ExeName) + 'report\' + MLabelCaption + '.rmf';

  if not FileExists(fPrintFile) then
    CopyFile(PChar(ExtractFilePath(Application.ExeName) + 'Report\ģ���ǩ.rmf'), PChar(fPrintFile), False);

  with RMLabel do
  begin
    RMLabel.Clear;
    RMDB_Label.DataSet := nil;
    Dictionary.FieldAliases.Clear;
    Dictionary.FieldAliases['RMDB_Label'] := '��ǩ����';
    RMDB_Label.DataSet := ADO_1;
    LoadFromFile(fPrintFile);
    application.ProcessMessages;
    DesignReport();
//    RMLabel.SaveToFile(fPrintFile);
    SaveLabel(MLabelID);
    ExportToFtErp(fPrintFile, ADOQueryCmd);
  end;
end;

procedure TfrmLabSet.ToolButton5Click(Sender: TObject);
begin
  ModalResult := 1;
end;

procedure TfrmLabSet.ToolButton6Click(Sender: TObject);
var
  MFromLabelId: string;
begin
  MFromLabelId := trim(CDS_Label.fieldbyname('LabelId').asstring);
  try
    frmLabelInput := TfrmLabelInput.create(self);
    with frmLabelInput do
    begin

      if showModal = 1 then
      begin
        FLabelId := frmLabelInput.LabelCaption.Text;
        with ADOQueryCmd do
        begin
          close;
          sql.clear;
          sql.Add(' exec P_BS_Label_Copy');
          sql.Add(' @FromLabelId=' + quotedstr(trim(MFromLabelId)));
          sql.Add(',@ToLabelId=' + quotedstr(trim(FLabelId)));
//          ShowMessage(sql.text);
          execSql;
        end;
        InitLabel();
      end;
    end;
  finally
    frmLabelInput.Free;
  end;
end;

procedure TfrmLabSet.TupdClick(Sender: TObject);
begin
  if CDS_Label.IsEmpty then
    exit;

  if (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '�κƱ�ǩ') or (trim(CDS_Label.fieldbyname('labelCaption').asstring) = '��̧ͷ�κƱ�ǩ') then
  begin
    Application.MessageBox('���ܲ���ģ���ǩ!', '��ʾ', 0);
    Exit;
  end;

  try
    frmLabelInput := TfrmLabelInput.create(self);
    with frmLabelInput do
    begin
      fLabelId := CDS_Label.fieldByName('LabelId').AsString;
      if showModal = 1 then
      begin
        InitLabel();
      end;
    end;
  finally
    frmLabelInput.Free;
  end;
end;

procedure TfrmLabSet.TVLabelCellClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
var
  fPrintFile: string;
begin
  if CDS_Label.IsEmpty then
    exit;
  ExportFtErpFile(TRIM(CDS_Label.fieldByName('LabelCaption').asString) + '.rmf', ADOQueryTemp);
  fPrintFile := ExtractFilePath(Application.ExeName) + 'Report\' + CDS_Label.fieldbyname('LabelCaption').AsString + '.rmf';
  if not FileExists(fPrintFile) then
    CopyFile(PChar(ExtractFilePath(Application.ExeName) + 'Report\ģ���ǩ.rmf'), PChar(fPrintFile), False);

  with RMLabel do
  begin
    RMLabel.LoadFromFile(fPrintFile);
    Preview := RMPreview3;
    ShowReport;
  end;
end;

end.