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;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    customerNo: TBtnEditA;
    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;
    procedure TcloseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TsaveClick(Sender: TObject);
    procedure LabelFileNameBtnClick(Sender: TObject);
    procedure customerNoBtnClick(Sender: TObject);
    procedure BtOpenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure RMPreview1DblClick(Sender: TObject);
  private
    fIsChg:Boolean;
    fFileName:string;
    fpathFileName:string;
    function SaveData():Boolean;
    function EditData():Boolean;
    function PostFileToData():boolean;
 //   function CovFileDate(Fd:_FileTime):TDateTime;
    procedure InitWinData();
    procedure InitVarDictionary();
    procedure InitDataSetDictionary();

  public
    fcustomNo:string;
    fKeyNo:string;
    fWinStatus:integer;
  end;

var
  frmLabelAdd: TfrmLabelAdd;

implementation
uses
  U_DataLink,U_Fun10;
{$R *.dfm}
/////////////////////////////////////////////
function CovFileDate(Fd:_FileTime):TDateTime;
var 
  Tct:_SystemTime;
  Temp:_FileTime;
begin 
  FileTimeToLocalFileTime(Fd,Temp);
  FileTimeToSystemTime(Temp,Tct);
  CovFileDate:=SystemTimeToDateTime(Tct);
end;
procedure 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.PostFileToData():boolean;
var
  mFileName:string;
  Stream : TMemoryStream;
  mfileSize:integer;
  mCreationTime:TdateTime;
  mWriteTime:TdateTime;
begin
  result:=false;
  try
   // ADOQueryCmd.Connection.BeginTrans ;
    try
      with ADOQueryCmd do
      begin
        close;
        sql.Clear ;
        sql.Add('delete  from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(trim(fFileName)));
        execsql;
      end;
      with ADOQueryCmd do
      begin
        close;
        sql.Clear ;
        sql.Add('select * from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(trim(fFileName)));
        Open;
        //////////////////////////
        //获取文件信息
        GetFileInfo(fpathFileName,mfileSize,mCreationTime,mWriteTime);

        if RecordCount<=0 then
        begin
          Append;
          fieldByName('FileName').AsString := 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 :=DServerDate;
        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;
      //  FJStream.LoadFromFile(fpathFileName);
      //  CompressionStream(FJStream);
        //tblobfield(FieldByName('Files')).LoadFromFile(FJStream);
        tblobfield(FieldByName('Files')).LoadFromFile(fpathFileName);
        //将OLE数据存入数据库
   //     ADOQueryCmdFileContent.LoadFromFile(fpathFileName);
        //ADOQueryCmdFileContent.LoadFromStream(Stream);

        post;
      end;
    finally
   //   FJStream.free;
    end;
    result:=true;
  //  ADOQueryCmd.Connection.CommitTrans ;
  except
   // ADOQueryCmd.Connection.RollbackTrans ;
  //  application.MessageBox(pchar('提交文件['+trim(fFileName)+']失败!'),'提示信息',MB_ICONERROR);
  end;

end;

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
  fIsChg:=false;
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;
  fpathFileName:= trim(LabelFileName.Text);
  fFileName:=ExtractFileName(fpathFileName);
  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.SaveData():Boolean;
begin
  ADOQueryCmd.Connection.BeginTrans;
  try
     with ADOQueryCmd do
     begin
        close;
        sql.Clear;
        sql.Add('select * from P_Label');
        sql.Add('where 1<>1');
        Open;

        Append;
        fieldByName('CustomerNO').value:=trim(customerno.txtCode);
        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;

      if not postFileToData() then
      begin
        ADOQueryCmd.Connection.RollbackTrans;
        application.MessageBox('保存标签模板出错!','警告信息',0);
        exit;
      end;
    result:=true;
    ADOQueryCmd.Connection.CommitTrans;
  except
    Result:=false;
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox('保存标签模板出错!','警告信息',0);
  end;
end;

/////////////////////////////////////////////////////////////////////
  //函数功能：保存数据
/////////////////////////////////////////////////////////////////////
function TfrmLabelAdd.EditData():Boolean;
begin
  ADOQueryCmd.Connection.BeginTrans;
  try
     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;
      if not postFileToData() then
      begin
        ADOQueryCmd.Connection.RollbackTrans;
        application.MessageBox('保存标签模板出错!','警告信息',0);
        exit;
      end;
    ADOQueryCmd.Connection.CommitTrans;
    result:=true;
  except
    Result:=false;
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox('保存标签模板出错!','警告信息',0);
  end;
end;

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

procedure TfrmLabelAdd.customerNoBtnClick(Sender: TObject);
begin
 {
  FormGetCust:=TFormGetCust.Create(self);

  if FormGetCust.ShowModal=mrok then
  begin
    customNo.TxtCode:=trim(FormGetCust.ADOQuery1.Fieldbyname('customno').AsString);
    customNo.Text:=trim(FormGetCust.ADOQuery1.Fieldbyname('shortname').AsString);
  end;
  FormGetCust.Free;
  }
{  frmCustHelp:=TfrmCustHelp.create(self);
  with frmCustHelp do
  begin
    if showModal=1 then
    begin
      customNo.TxtCode:=trim(ADOQueryHelp.Fieldbyname('customno').AsString);
      customNo.Text:=trim(ADOQueryHelp.Fieldbyname('shortname').AsString);
    end;
    free;
  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('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.ShowReport ;
      RMPreview1.Refresh;
    end;
  except
  end;
end;

procedure TfrmLabelAdd.FormShow(Sender: TObject);
begin
  if fWinStatus>0 then
    InitWinData();
  RMPreview1.Align:=alClient;
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.
