unit U_WXFPInPut;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxControls,
  cxGridCustomView, cxGrid, cxMemo, cxRichEdit, ComCtrls, cxContainer,
  cxTextEdit, cxMaskEdit, cxButtonEdit, StdCtrls, ToolWin, DBClient, ADODB,
  ExtCtrls, BtnEdit, cxDropDownEdit, cxCalendar, cxGridCustomPopupMenu,
  cxGridPopupMenu;

type
  TfrmWXFPInPut = class(TForm)
    ToolBar1: TToolBar;
    TBSave: TToolButton;
    TBClose: TToolButton;
    ADOTemp: TADOQuery;
    ADOCmd: TADOQuery;
    DataSource1: TDataSource;
    Order_Sub: TClientDataSet;
    DataSource2: TDataSource;
    ADOZDY: TADOQuery;
    CDS_ZDY: TClientDataSet;
    ADOQuery1: TADOQuery;
    cxGridPopupMenu1: TcxGridPopupMenu;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ClientDataSet1: TClientDataSet;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1Column6: TcxGridDBColumn;
    v1Column18: TcxGridDBColumn;
    v1Column1: TcxGridDBColumn;
    v1Column3: TcxGridDBColumn;
    v1Column2: TcxGridDBColumn;
    v1Column12: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    Panel1: TPanel;
    Label1: TLabel;
    FPNO: TEdit;
    Label2: TLabel;
    FPDate: TDateTimePicker;
    ChengJiaoType: TBtnEditA;
    Label3: TLabel;
    FromPlace: TBtnEditA;
    Label4: TLabel;
    ToPlace: TBtnEditA;
    Label5: TLabel;
    BankName: TBtnEditA;
    Label6: TLabel;
    Label7: TLabel;
    GHDanWei: TEdit;
    Label8: TLabel;
    XHDanWei: TEdit;
    Label9: TLabel;
    XYZNO: TEdit;
    v1Column4: TcxGridDBColumn;
    v1Column5: TcxGridDBColumn;
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBSaveClick(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure v1Column3PropertiesEditValueChanged(Sender: TObject);
    procedure v1Column20PropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure ChengJiaoTypeBtnClick(Sender: TObject);
    procedure FromPlaceBtnClick(Sender: TObject);
    procedure ToPlaceBtnClick(Sender: TObject);
    procedure BankNameBtnClick(Sender: TObject);
  private
    FXS:Integer;
    procedure InitData();
    procedure ZDYHelp(FButn:TcxButtonEdit;LType:string);
    function  SaveData():Boolean;
    procedure GetMaxConNO();
    { Private declarations }
  public
    PState,PCopyInt:Integer;
    FMainId,FConNo,FConType,FYLType:String;

    { Public declarations }
  end;

var
  frmWXFPInPut: TfrmWXFPInPut;

implementation
uses
  U_DataLink,U_ZDYHelp,U_RTFun,U_ZDYHelpSel,U_BGHZSelList;

{$R *.dfm}

procedure TfrmWXFPInPut.TBCloseClick(Sender: TObject);
begin
  Close;
  WriteCxGrid('外销发票录入',Tv1,'发票管理');
end;

procedure TfrmWXFPInPut.InitData();
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select A.*,B.* ');
    SQL.Add(' from FP_XiaoShou A');
    sql.Add(' inner join FP_XiaoShou_Sub B on A.FXID=B.FXID');
    sql.Add(' where A.FXID='''+Trim(FMainId)+'''');
    Open;
  end;
  SCreateCDS20(ADOQuery1,Order_Sub);
  SInitCDSData20(ADOQuery1,Order_Sub);
  SCSHDataNew(ADOQuery1,Panel1,0);

end;

procedure TfrmWXFPInPut.ZDYHelp(FButn:TcxButtonEdit;LType:string);
begin
end;

procedure TfrmWXFPInPut.FormShow(Sender: TObject);
begin
  ReadCxGrid('外销发票录入',Tv1,'发票管理');
  FPDate.DateTime:=SGetServerDate(ADOTemp);
  InitData();
end;
procedure TfrmWXFPInPut.GetMaxConNO();
begin

end;
function TfrmWXFPInPut.SaveData():Boolean;
var
  maxno,maxsubNo:String;
begin
  try
    Result:=False;
    ADOCmd.Connection.BeginTrans;
    //保存主表
    if Trim(FMainId)='' then
    begin
      if GetLSNo(ADOCmd,maxno,'FX','FP_XiaoShou',3,1)=False then
      begin
        ADOCmd.Connection.RollbackTrans;
        Application.MessageBox('取最大号失败!','提示',0);
        Exit;
      end;
    end else
    begin
      maxno:=Trim(FMainId);
    end;
    with ADOCmd do
    begin
      Close;
      sql.Clear;
      SQL.Add('select * from FP_XiaoShou where FXID='''+Trim(FMainId)+'''');
      Open;
    end;
    with ADOCmd do
    begin
      if Trim(FMainId)='' then
      begin
        Append;
      end
      else begin
        Edit;
      end;
      FieldByName('FXID').Value:=Trim(maxno);
      RTSetsavedata(ADOCmd,'FP_XiaoShou',Panel1,0);
      if Trim(FMainId)='' then
      begin
        FieldByName('Filler').Value:=Trim(DName);
      end else
      begin
        FieldByName('Editer').Value:=Trim(DName);
        FieldByName('EditTime').Value:=SGetServerDateTime(ADOTemp);
      end;
     // FieldByName('Note').Value:=Trim(Note.Text);
      Post;
    end;
    with ADOCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from FP_XiaoShou where FPNo='''+Trim(FPNo.Text)+'''');
      Open;
    end;
    if ADOCmd.RecordCount>1 then
    begin
      ADOCmd.Connection.RollbackTrans;
      Application.MessageBox('发票号重复!','提示',0);
      Exit;
    end;

    Order_Sub.DisableControls;
    with Order_Sub do
    begin
      First;
      while not Eof do
      begin
        if Trim(Order_Sub.fieldbyname('FSID').AsString)='' then
        begin
          if GetLSNo(ADOCmd,maxsubNo,'FS','FP_XiaoShou_Sub',4,1)=False then
          begin
            Order_Sub.EnableControls;
            ADOCmd.Connection.RollbackTrans;
            Application.MessageBox('取规则流水号失败!','提示',0);
            Exit;
          end;
        end else
        begin
          maxsubNo:=Trim(Order_Sub.fieldbyname('FSID').AsString);
        end;
        with ADOCmd do
        begin
          Close;
          sql.Clear;
          SQL.Add('select * from FP_XiaoShou_Sub where FSID='''+Trim(Order_Sub.fieldbyname('FSID').AsString)+'''');
          Open;
        end;
        with ADOCmd do
        begin
          if Trim(Order_Sub.fieldbyname('FSID').AsString)='' then
          begin
            Append;
          end
          else begin
            Edit;
          end;
          FieldByName('FXID').Value:=Trim(maxno);
          FieldByName('FSID').Value:=Trim(maxsubNo);
          FieldByName('BGID').Value:=Order_Sub.fieldbyname('BGID').Value;
          FieldByName('BCID').Value:=Order_Sub.fieldbyname('BCID').Value;
          FieldByName('NQID').Value:=Order_Sub.fieldbyname('NQID').Value;
          RTSetSaveDataCDS(ADOCmd,Tv1,Order_Sub,'FP_XiaoShou_Sub',0) ;
          Post;
        end;
        Edit;
        FieldByName('FSID').Value:=Trim(maxsubNo);
        Next;
      end;
    end;
    Order_Sub.EnableControls;
    ADOCmd.Connection.CommitTrans;
    Result:=True;
  except
    Result:=False;
    ADOCmd.Connection.RollbackTrans;
    Application.MessageBox('保存失败！','提示',0);
  end;
end;

procedure TfrmWXFPInPut.TBSaveClick(Sender: TObject);
var
  FPPrice,PRTPrice,BCMoney,FPQty,ChaMoney:string;
begin
  ToolBar1.SetFocus;
  if Trim(FPNO.Text)='' then
  begin
    Application.MessageBox('发票号不能为空!','提示',0);
    Exit;
  end;
  if Trim(GHDanWei.Text)='' then
  begin
    Application.MessageBox('购货单位不能为空!','提示',0);
    Exit;
  end;
  if Trim(XHDanWei.Text)='' then
  begin
    Application.MessageBox('销货单位不能为空!','提示',0);
    Exit;
  end;
  if Order_Sub.IsEmpty then
  begin
    Application.MessageBox('明细不能为空！','提示',0);
    exit;
  end;
  if Order_Sub.Locate('Qty',null,[]) then
  begin
    Application.MessageBox('数量不能为空!','提示',0);
    Exit;
  end;
  if Order_Sub.Locate('Price',null,[]) then
  begin
    Application.MessageBox('单价不能为空!','提示',0);
    Exit;
  end;
  if Order_Sub.Locate('Money',null,[]) then
  begin
    Application.MessageBox('金额不能为空!','提示',0);
    Exit;
  end;
  if SaveData() then
  begin
    Application.MessageBox('保存成功！','提示',0);
    ModalResult:=1;
  end;

end;

procedure TfrmWXFPInPut.ToolButton3Click(Sender: TObject);
var
  FSQDate,FGHDanWei,FXHDanWei:string;
begin
  FSQDate:=Trim(FormatDateTime('yyyy-MM-dd',SGetServerDate(ADOTemp)));
  try
    frmBGHZSelList:=TfrmBGHZSelList.Create(Application);
    with frmBGHZSelList do
    begin
      if ShowModal=1 then
      begin
        with frmBGHZSelList.CDS_HZ do
        begin
          First;
          while not Eof do
          begin
            if frmBGHZSelList.CDS_HZ.FieldByName('SSel').AsBoolean=True then
            begin
              if  frmBGHZSelList.CDS_HZ.FieldByName('WXFPMoney').Value=0 then
              begin
                FGHDanWei:=Trim(frmBGHZSelList.CDS_HZ.fieldbyname('KHName').AsString);
                FXHDanWei:=Trim(frmBGHZSelList.CDS_HZ.fieldbyname('FPDanWei').AsString);
                with Self.Order_Sub do
                begin
                  Append;
                  FieldByName('BGId').Value:=frmBGHZSelList.CDS_HZ.FieldByName('BGId').Value;
                  FieldByName('BCID').Value:=frmBGHZSelList.CDS_HZ.FieldByName('BCID').Value;
                  FieldByName('NQID').Value:=frmBGHZSelList.CDS_HZ.FieldByName('NQID').Value;
                  FieldByName('OrderNo').Value:=frmBGHZSelList.CDS_HZ.FieldByName('OrderNo').Value;
                  FieldByName('BGName').Value:=frmBGHZSelList.CDS_HZ.FieldByName('BGName').Value;
                  FieldByName('QtyUnit').Value:=frmBGHZSelList.CDS_HZ.FieldByName('NQUnit').Value;
                  FieldByName('SGHDanWei').Value:=frmBGHZSelList.CDS_HZ.FieldByName('KHName').Value;
                  FieldByName('SXHDanWei').Value:=frmBGHZSelList.CDS_HZ.FieldByName('FPDanWei').Value;
                  if Trim(frmBGHZSelList.CDS_HZ.FieldByName('NQUnit').AsString)='M' then
                  begin
                    FieldByName('Qty').Value:=frmBGHZSelList.CDS_HZ.FieldByName('NQMQty').Value;
                  end else
                  begin
                    FieldByName('Qty').Value:=frmBGHZSelList.CDS_HZ.FieldByName('NQkgQty').Value;
                  end;
                  FieldByName('Price').Value:=frmBGHZSelList.CDS_HZ.FieldByName('BGPrice').Value;
                  FieldByName('Money').Value:=frmBGHZSelList.CDS_HZ.FieldByName('BGMoney').Value;
                  FieldByName('FPDate').Value:=FSQDate;
                  //Post;
                end;
              end;

            end;
            Next;
          end;
        end;
      end;
    end;
  finally
    frmBGHZSelList.Free;
  end;
  if Trim(GHDanWei.Text)='' then
    GHDanWei.Text:=Trim(FGHDanWei);
  if Trim(XHDanWei.Text)='' then
    XHDanWei.Text:=Trim(FXHDanWei);
end;

procedure TfrmWXFPInPut.ToolButton4Click(Sender: TObject);
begin
  if Order_Sub.IsEmpty then Exit;
  if Trim(Order_Sub.fieldbyname('FSId').AsString)<>'' then
  begin
    if Application.MessageBox('确定要删除数据吗？','提示',32+4)<>IDYES then Exit;
    with ADOCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete FP_XiaoShou_Sub where FSId='''+Trim(Order_Sub.fieldbyname('FSId').AsString)+'''');
      ExecSQL;
    end;
  end;
  Order_Sub.Delete;
end;

procedure TfrmWXFPInPut.v1Column3PropertiesEditValueChanged(
  Sender: TObject);
var
  mvalue,FQty,FPrice,FMoney,FName:String;
begin
  FName:=Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName;
  mvalue:=TcxTextEdit(Sender).EditingText;
  if Trim(mvalue)='' then mvalue:='0';
  with Order_Sub do
  begin
    Edit;
    FieldByName(FName).Value:=mvalue;
    Post;
  end;
  FQty:=Order_Sub.fieldbyname('Qty').AsString;
  FPrice:=Order_Sub.fieldbyname('Price').AsString;
  FMoney:=Order_Sub.fieldbyname('Money').AsString;
  if Trim(FQty)='' then FQty:='0';
  if Trim(FPrice)='' then FPrice:='0';
  if Trim(FMoney)='' then FMoney:='0';
  if Trim(FName)<>'Money' then
  begin
    with Order_Sub do
    begin
      Edit;
      FieldByName('Money').Value:=StrToFloat(FQty)*StrToFloat(FPrice);
      Post;
    end;
  end else
  begin
    if Trim(FQty)<>'0' then
    begin
      with Order_Sub do
      begin
        Edit;
        FieldByName('Price').Value:=StrToFloat(FMoney)*1.000000/StrToFloat(FQty);
        Post;
      end;
    end else
    begin
      with Order_Sub do
      begin
        Edit;
        FieldByName('Price').Value:=Null;
        Post;
      end;
    end;
  end;
end;

procedure TfrmWXFPInPut.v1Column20PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='GSTT';
      flagname:='报关单位';
      V1ZdyStr1.Visible:=True;
      V1ZdyStr2.Visible:=True;
      V1ZdyStr3.Visible:=True;
      V1ZdyStr4.Visible:=True;
      V1ZdyStr1.Caption:='简称';
      V1ZdyStr2.Caption:='电话';
      V1ZdyStr3.Caption:='传真';
      V1ZdyStr4.Caption:='地址';
      frmZDYHelp.Align:=alClient;
      if ShowModal=1 then
      begin
        with Order_Sub do
        begin
          Edit;
          FieldByName('GHDanWei').Value:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
        end;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmWXFPInPut.ChengJiaoTypeBtnClick(Sender: TObject);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='ChengJiaoType';
      flagname:='成交方式';
      if ShowModal=1 then
      begin
        ChengJiaoType.Text:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmWXFPInPut.FromPlaceBtnClick(Sender: TObject);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='ChuKouKA';
      flagname:='出口口岸';
      if ShowModal=1 then
      begin
        FromPlace.Text:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmWXFPInPut.ToPlaceBtnClick(Sender: TObject);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='YunDiG';
      flagname:='运抵国';
      if ShowModal=1 then
      begin
        ToPlace.Text:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmWXFPInPut.BankNameBtnClick(Sender: TObject);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='WXBankName';
      flagname:='银行名称';
      if ShowModal=1 then
      begin
        BankName.Text:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

end.
