unit U_LabelAdd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, StdCtrls, BtnEdit, ExtCtrls, DB, ADODB,
  RM_System, RM_Common, RM_Class, RM_GridReport, Buttons, FTComboBox,
  RM_Preview, RM_e_Xls, RM_e_Graphic, RM_e_bmp, RM_BarCode,
  RM_DsgGridReport, RM_Dataset, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid;

type
  TfrmLabelAdd = class(TForm)
    Panel1: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    LabelFileName: TBtnEditA;
    beizhu: TMemo;
    ToolBar1: TToolBar;
    Tsave: TToolButton;
    Tclose: TToolButton;
    ADOQueryCmd: TADOQuery;
    OpenDialog1: TOpenDialog;
    RMGridReport1: TRMGridReport;
    Label9: TLabel;
    LabelCaption: TEdit;
    Label10: TLabel;
    LabelType: TFTComboBox;
    ADOQueryTmp: TADOQuery;
    RMPreview1: TRMPreview;
    RMGridReportDesigner1: TRMGridReportDesigner;
    RMBarCodeObject1: TRMBarCodeObject;
    RMBMPExport1: TRMBMPExport;
    RMXLSExport1: TRMXLSExport;
    RMDS_Main: TRMDBDataSet;
    RMDataDictionary1: TRMDataDictionary;
    ADOQuery1: TADOQuery;
    RMGridReport2: TRMGridReport;
    ADOQueryCmdSC: TADOQuery;
    ADOQueryCmdFileContent: TBlobField;
    ADOQueryCmdFtFileName: TStringField;
    ADOQueryCmdFileEditDate: TDateTimeField;
    ADOQueryCmdFileSize: TFloatField;
    ADOQueryCmdFiller: TStringField;
    ADOQueryCmdLastEditTime: TDateTimeField;
    ADOQueryCmdLastEditer: TStringField;
    ADOQueryCmdFileCreateDate: TDateTimeField;
    ADOQueryCmdchildPath: TStringField;
    ADOQueryCmdFileType: TStringField;
    procedure TcloseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TsaveClick(Sender: TObject);
    procedure LabelFileNameBtnClick(Sender: TObject);
    procedure BtOpenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure RMPreview1DblClick(Sender: TObject);
  private
    fIsChg:Boolean;
    function SaveData():Boolean;
    function EditData():Boolean;
    procedure InitWinData();
    procedure InitVarDictionary();
    procedure InitDataSetDictionary();
    function  PostFileToData():boolean;
    procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
    function  CovFileDate(Fd:_FileTime):TDateTime;
  public
    fcustomNo:string;
    fKeyNo:string;
    fWinStatus:integer;
  end;

var
  frmLabelAdd: TfrmLabelAdd;

implementation
uses
  U_DataLink,U_RTFun;
{$R *.dfm}

procedure TfrmLabelAdd.TcloseClick(Sender: TObject);
begin
  if fIsChg then
  begin
    if application.MessageBox('��ǩ��ƹ����Ƿ�Ҫ����?','��ʾ��Ϣ',1)=1 then
    begin
      Tsave.Click ;
    end
    else
      close;
  end
  else
    close;
end;

procedure TfrmLabelAdd.FormCreate(Sender: TObject);
begin
  panel1.Align :=alClient;
  fIsChg:=false;
//  ClearWinData(panel1);
 // InitVarDictionary();
end;

procedure TfrmLabelAdd.TsaveClick(Sender: TObject);
begin
  if trim(labelCaption.Text)='' then
  begin
    application.MessageBox('��ǩ���Ʋ���Ϊ�գ�','��ʾ');
    labelCaption.SetFocus;
    exit;
  end;
  if trim(LabelFileName.Text)='' then
  begin
    application.MessageBox('��ǩ�ļ�����Ϊ�գ���ѡ���ǩ��','��ʾ');
    LabelFileName.SetFocus;
    exit;
  end;
  PostFileToData();
  if fWinStatus=0 then
  begin
    if SaveData() then
    begin
      ModalResult:=1;
    end;
  end
  else
  begin
    if EditData() then
    begin
      ModalResult:=1;
    end;
  end;

end;
function TfrmLabelAdd.PostFileToData():boolean;
var
  mFileName,fFileName,fpathFileName:string;
  Stream : TMemoryStream;
  mfileSize:integer;
  mCreationTime:TdateTime;
  mWriteTime:TdateTime;
begin
  result:=false;
  fFileName:=Trim(LabelCaption.Text);
  fpathFileName:=Trim(LabelFileName.Text);
  try
    ADOQueryCmdSC.Connection.BeginTrans ;
    try
      with ADOQueryCmdSC do
      begin
        close;
        sql.Clear ;
        sql.Add('delete  from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(trim(fFileName)));
        execsql;
      end;
      with ADOQueryCmdSC do
      begin
        close;
        sql.Clear ;
        sql.Add('select * from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(trim(fFileName)));
        Open;
        //////////////////////////
        //��ȡ�ļ���Ϣ
        GetFileInfo(Trim(fpathFileName),mfileSize,mCreationTime,mWriteTime);

        if RecordCount<=0 then
        begin
          Append;
          fieldByName('FileName').AsString := trim(fFileName);
        end
        else
        begin
          edit;
        end;

        fieldByName('FileEditDate').Value :=mWriteTime;
        fieldByName('FileCreateDate').Value :=mCreationTime;
        fieldByName('FileSize').Value :=mfileSize;
        fieldByName('Filler').Value :=Dname;
        fieldByName('LastEditer').Value :=Dname;
        fieldByName('LastEditTime').Value :=SGetServerDateTime(ADOQueryTmp);
        if pos('.rmf',fFileName)>0 then
        begin
          fieldByName('FilePath').Value :='report';
          fieldByName('FileType').Value :='����';
        end
        else if pos('.dll',fFileName)>0 then
        begin
          fieldByName('FilePath').Value :='';
          fieldByName('FileType').Value :='һ��';
        end
        else
        begin
          fieldByName('FilePath').Value :='';
          fieldByName('FileType').Value :='����';
        end;
        //��OLE���ݴ������ݿ�
        ADOQueryCmdFileContent.LoadFromFile(fpathFileName);
        //ADOQueryCmdFileContent.LoadFromStream(Stream);

        post;
      end;
    finally
    end;
    result:=true;
    ADOQueryCmdSC.Connection.CommitTrans ;
  except
    ADOQueryCmdSC.Connection.RollbackTrans ;
    Result:=False;
    application.MessageBox(pchar('�ύ�ļ�['+trim(fFileName)+']ʧ��!'),'��ʾ��Ϣ',MB_ICONERROR);
  end;

end;
procedure TfrmLabelAdd.GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
var
  vSearchRec:   TSearchRec;
begin
   FindFirst(mFile,faAnyFile,vSearchRec);
   mfileSize:=vSearchRec.Size;
   CreationTime:=CovFileDate(vSearchRec.FindData.ftCreationTime);//����ʱ��
   //vSearchRec.FindData.ftLastAccessTime//����ʱ��
   WriteTime:=CovFileDate(vSearchRec.FindData.ftLastWriteTime);//�޸�ʱ��
   FindClose(vSearchRec);
end;
function TfrmLabelAdd.CovFileDate(Fd:_FileTime):TDateTime;
var
  Tct:_SystemTime;
  Temp:_FileTime;
begin 
  FileTimeToLocalFileTime(Fd,Temp);
  FileTimeToSystemTime(Temp,Tct);
  CovFileDate:=SystemTimeToDateTime(Tct);
end;

/////////////////////////////////////////////////////////////////////
  //�������ܣ���������
/////////////////////////////////////////////////////////////////////
function TfrmLabelAdd.SaveData():Boolean;
begin
  try
     ADOQueryCmd.Connection.BeginTrans;
     with ADOQueryCmd do
     begin
        close;
        sql.Clear;
        sql.Add('select * from P_Label');
        sql.Add('where 1<>1');
        Open;

        Append;
        fieldByName('filler').value:=DName;
        fieldByName('filltime').value:=DServerDate;
        fieldByName('beizhu').value:= trim(beizhu.text);
        fieldByName('LabelCaption').value:=trim(LabelCaption.text);
        fieldByName('LabelType').value:=trim(LabelType.text);
        fieldByName('LabelFileName').value:= trim(LabelFileName.text);
        //TBlobField(FieldByName('LabelFile')).LoadFromStream(fStream);
        RMGridReport1.SaveToBlobField(TBlobField(FieldByName('LabelFile')));
        Post;
     end;
     with ADOQueryTmp do
     begin
       Close;
       sql.Clear;
       sql.Add('select * from P_Label where LabelCaption='''+Trim(LabelCaption.text)+'''');
       Open;
     end;
     if ADOQueryTmp.RecordCount>1 then
     begin
       ADOQueryCmd.Connection.RollbackTrans;
       Result:=False;
       Application.MessageBox('��ǩ�����ظ�!','��ʾ',0);
       Exit;
     end;
     
     ADOQueryCmd.Connection.CommitTrans;
     result:=true;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Result:=false;
    application.MessageBox('�����ǩģ�����!','������Ϣ',0);
  end;
end;

/////////////////////////////////////////////////////////////////////
  //�������ܣ���������
/////////////////////////////////////////////////////////////////////
function TfrmLabelAdd.EditData():Boolean;
begin
  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
        close;
        sql.Clear;
        sql.Add('select * from P_Label');
        sql.Add('where labelId='+fkeyNo);
        Open;
        Edit;
        fieldByName('LabelCaption').value:=trim(LabelCaption.text);
        fieldByName('LabelType').value:=trim(LabelType.text);
        fieldByName('LabelFileName').value:= trim(LabelFileName.text);
        RMGridReport1.SaveToBlobField(TBlobField(FieldByName('LabelFile')));
        fieldByName('Editer').value:=DName;
        fieldByName('EditTime').value:=DServerDate;
        fieldByName('beizhu').value:= trim(beizhu.text);
        Post;
    end;
    with ADOQueryTmp do
     begin
       Close;
       sql.Clear;
       sql.Add('select * from P_Label where LabelCaption='''+Trim(LabelCaption.text)+'''');
       Open;
     end;
     if ADOQueryTmp.RecordCount>1 then
     begin
       ADOQueryCmd.Connection.RollbackTrans;
       Result:=False;
       Application.MessageBox('��ǩ�����ظ�!','��ʾ',0);
       Exit;
     end;
     
     ADOQueryCmd.Connection.CommitTrans;
    result:=true;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Result:=false;
    application.MessageBox('�����ǩģ�����!','������Ϣ',0);
  end;
end;

procedure TfrmLabelAdd.LabelFileNameBtnClick(Sender: TObject);
begin
  if OpenDialog1.Execute() then
  begin
    LabelFileName.Text:=OpenDialog1.FileName;
    LabelCaption.Text:=Trim(ExtractFileName(OpenDialog1.FileName));
    RMGridReport1.LoadFromFile(LabelFileName.Text);
    RMGridReport1.Preview :=RMPreview1;
    RMGridReport1.ShowReport ;
  end;
end;

procedure TfrmLabelAdd.BtOpenClick(Sender: TObject);
begin


end;
////////////////////////////////////////////////////////////
  //��ʼ����������
////////////////////////////////////////////////////////////
procedure TfrmLabelAdd.InitWinData();
begin
  try
    with ADOQueryTmp do
    begin
      close;
      sql.Clear ;
      sql.Add('select A.*');
    //  sql.Add('customNoName=isnull((select customName from BC_customer where customNO=A.customNo),A.customNo)');
      sql.Add('from P_Label A');
      sql.Add('WHERE LabelId='+fkeyNo);
      Open;
      if isEmpty then
      begin
        close;
        exit;
      end;

      SSetWinData(ADOQueryTmp,panel1);
      RMGridReport1.LoadFromBlobField(tblobfield(fieldbyname('labelFile')));
      RMGridReport2.FileName:=trim(fieldByName('labelFileName').AsString);
      RMGridReport2.LoadFromBlobField(tblobfield(fieldbyname('labelFile')));
      RMGridReport1.Preview :=RMPreview1;
      //RMGridReport1.PrepareReport;
      RMGridReport1.ShowReport ;
    end;
  except
  end;
end;

procedure TfrmLabelAdd.FormShow(Sender: TObject);
begin
  if fWinStatus>0 then
    InitWinData();
end;

procedure TfrmLabelAdd.RMPreview1DblClick(Sender: TObject);
begin
  //btOpen.Click ;
end;
////////////////////////////////////////////////////////////
  //
////////////////////////////////////////////////////////////
procedure TfrmLabelAdd.InitVarDictionary();
var
  i:integer;
begin
{  try
    with RMGridReport2 do
    begin
        Dictionary.Variables.Clear ;
        Dictionary.Variables.AddCategory('�ͻ���λ��Ϣ');
        with ADOQueryTmp do
        begin
          close;
          sql.clear;
          sql.Add('exec P_Label_CustPrintData');
          sql.Add(quotedStr(fCustomNo));
          Open;
          for i:=0 to FieldCount-1 do
          begin

            Dictionary.Variables.Add(trim(fields[i].FieldName)
                                ,'');
            Dictionary.Variables.AsString[trim(fields[i].FieldName)]:=trim(fields[i].AsString);
          end;
        end;
    end;
  finally

  end;  }
end;
/////////////////////////////////////////////////
  //
/////////////////////////////////////////////////
procedure TfrmLabelAdd.InitDataSetDictionary();
begin
{  with ADOQuery1 do
  begin
    close;
    sql.Clear ;
    sql.Add('exec P_Label_PrintSet');
    sql.Add(quotedStr(''));
    //sql.Add(','+quotedStr(''));
    //sql.Add(','+quotedStr(''));
    //sql.Add(','+quotedStr(''));
    //sql.Add(','+quotedStr(''));
    OPen;
  end;
  with RMGridReport2 do
  begin
    Dictionary.FieldAliases.Clear;
    Dictionary.FieldAliases['RMDS_Main']:= '��ǩ����';
    Dictionary.FieldAliases['RMDS_Main."barcode"']:='��ǩ����';
  end;     }
end;

end.