unit U_CollectList;

interface

uses
  Windows, Messages, 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, cxPC, cxDropDownEdit, cxLookAndFeels, cxLookAndFeelPainters,
  cxNavigator, dxBarBuiltInMenu, dxSkinsCore, dxSkinsDefaultPainters,
  dxDateRanges, U_BaseList, Vcl.Menus, Vcl.Clipbrd, dxSkinWXI,
  dxScrollbarAnnotations, cxCalc;

type
  TfrmCollectList = class(TfrmBaseList)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    btnDel: TToolButton;
    TBClose: TToolButton;
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    Panel1: TPanel;
    ADOQueryMain: TADOQuery;
    RM1: TRMGridReport;
    RMDB_Main: TRMDBDataSet;
    Label3: TLabel;
    OppCoName: TEdit;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v2CRTime: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    begdate: TDateTimePicker;
    Enddate: TDateTimePicker;
    GPM_1: TcxGridPopupMenu;
    DS_1: TDataSource;
    CDS_1: TClientDataSet;
    btnAdd: TToolButton;
    v2FactoryName: TcxGridDBColumn;
    F_Name: TEdit;
    Label4: TLabel;
    CheckBox1: TCheckBox;
    Label6: TLabel;
    F_Code: TEdit;
    v2OrderNo: TcxGridDBColumn;
    cxTabControl1: TcxTabControl;
    Label10: TLabel;
    OrderNo: TEdit;
    Label11: TLabel;
    BuyConNo: TEdit;
    v2Column2: TcxGridDBColumn;
    btnChk: TToolButton;
    btnReChk: TToolButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    ToolButton4: TToolButton;
    Label2: TLabel;
    OppParentCoName: TEdit;
    ToolButton5: TToolButton;
    N2: TMenuItem;
    btnEdit: TToolButton;
    Tv1Column1: TcxGridDBColumn;
    Tv1Column2: TcxGridDBColumn;
    Tv1Column3: TcxGridDBColumn;
    Tv1Column17: TcxGridDBColumn;
    Tv1Column18: TcxGridDBColumn;
    Tv1Column19: TcxGridDBColumn;
    Tv1Column20: TcxGridDBColumn;
    Tv1Column21: TcxGridDBColumn;
    Tv1Column22: TcxGridDBColumn;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    Tv1Column4: TcxGridDBColumn;
    Tv1Column5: TcxGridDBColumn;
    ToolButton9: TToolButton;
    N3: TMenuItem;
    Tv1Column6: TcxGridDBColumn;
    Tv1Column7: TcxGridDBColumn;
    Tv1Column8: TcxGridDBColumn;
    Tv1Column9: TcxGridDBColumn;
    ToolButton1: TToolButton;
    Tv1Column10: TcxGridDBColumn;
    Tv1Column11: TcxGridDBColumn;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton6: TToolButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Label5: TLabel;
    SXFAmount: TEdit;
    JHExchangeRate: TEdit;
    Button1: TButton;
    Button2: TButton;
    FFID: TEdit;
    Tv1Column12: TcxGridDBColumn;
    Tv1Column13: TcxGridDBColumn;
    Tv1Column14: TcxGridDBColumn;
    Tv1Column15: TcxGridDBColumn;
    DKAmount: TEdit;
    Label7: TLabel;
    Tv1Column16: TcxGridDBColumn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure cxGridDBColumn5PropertiesEditValueChanged(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure OppCoNameKeyPress(Sender: TObject; var Key: Char);
    procedure cxTabControl1Change(Sender: TObject);
    procedure btnChkClick(Sender: TObject);
    procedure btnReChkClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure ToolButton9Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure JHExchangeRateKeyPress(Sender: TObject; var Key: Char);
    procedure ToolButton6Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure InitGrid();
    procedure SetStatus();
  public
    FAuthority: string;
  end;

implementation

uses
  U_DataLink, U_RTFun, U_CollectInput, U_ZDYHelp, U_CollectWriteOff,
  U_CollectWriteOffList, U_AttachmentUpload;

{$R *.dfm}
procedure TfrmCollectList.SetStatus();
begin

  btnChk.Enabled := false;     //审核
  btnReChk.Enabled := false;     //撤销

  btnAdd.Enabled := false;     //新增
  btnEdit.Enabled := false;     //修改
  btnDel.Enabled := false;           //删除

  ToolButton2.Enabled := false;     //完成核销
  ToolButton3.Enabled := false;     //撤销完成
//  if Trim(FAuthority) = '管理' then
  begin
    btnAdd.Enabled := true;
    case cxTabControl1.TabIndex of
      0:
        begin
          btnEdit.Enabled := true;
          btnDel.Enabled := true;
          btnChk.Enabled := true;
        end;
      1:
        begin
          btnReChk.Enabled := true;
          ToolButton2.Enabled := true;
          ToolButton3.Enabled := true;
        end;
      2:
        begin

        end;
    end;
  end;
end;

procedure TfrmCollectList.InitGrid();
var
  WSql: string;
begin
  WSql := SGetFilters(Panel1, 1, 2);
  if Trim(WSql) <> '' then
    WSql := ' and ' + WSql
  else
    CheckBox1.Checked := True;

  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      SQL.Clear;
      Filtered := False;
      sql.Add(' select IsFJ=cast((case when (select COUNT(T.WBID) from FJ_File T where T.TFType = ''SD'' and T.WBID=A.FFID)=0 then 0 else 1 end) as bit )');
      sql.Add(',Amount=(Case when ISNULL(A.RegType,'''')=''收款'' then -1*Amount else Amount end)');
      sql.Add(',SSAmount=(Case when ISNULL(A.RegType,'''')=''收款'' then -1*Amount else Amount end)-ISNULL(A.SXFAmount,0)');
      sql.Add(',SSCNYAmount=((Case when ISNULL(A.RegType,'''')=''收款'' then -1*Amount else Amount end) ');
      sql.Add('-ISNULL(A.SXFAmount,0))*ISNULL((Case when Currency=''CNY'' then 1 else A.JHExchangeRate end),1)');
      SQL.Add(',A.*,Saleser=(select Top 1 Saleser from BS_Company X where X.CoAbbrName=A.OppCoName)');
      sql.Add(' from Finance_Flow A where A.FFType=''收款登记''  ');
      case cxTabControl1.TabIndex of
        0:
          begin
            sql.Add(' and isnull(status,''0'')=''0'' ');
          end;
        1:
          begin
            sql.Add(' and isnull(status,''0'')=''9'' ');
          end;
      end;
      if CheckBox1.Checked then
      begin
        sql.Add(' and ISNULL(A.FFTime,A.SQDate)>=''' + FormatDateTime('yyyy-MM-dd', begdate.DateTime) + ''' ');
        sql.Add(' and ISNULL(A.FFTime,A.SQDate)<''' + FormatDateTime('yyyy-MM-dd', Enddate.DateTime + 1) + ''' ');
      end;
      sql.Add(WSql);
      sql.Add('Order By A.HXFlag');
//      showmessage(sql.text);
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);
  finally
    ADOQueryMain.EnableControls;
    TV1.DataController.Filter.Clear;
  end;
end;

procedure TfrmCollectList.JHExchangeRateKeyPress(Sender: TObject; var Key: Char);
begin
  if not (((Key >= '0') and (Key <= '9')) or (Key = '.') or (Key = #8)) then
  begin
    Key := #0;
  end
  else if (pos('.', TEdit(Sender).text) <> 0) then
  begin
    if Key = '.' then
    begin
      Key := #0;
    end;
  end;

end;

procedure TfrmCollectList.N1Click(Sender: TObject);
begin
  SelOKNo(cds_1, true);
end;

procedure TfrmCollectList.N2Click(Sender: TObject);
begin
  Clipboard.SetTextBuf(PChar(Trim(CDS_1.fieldbyname(TV1.Controller.FocusedColumn.DataBinding.FilterFieldName).AsString)));
end;

procedure TfrmCollectList.N3Click(Sender: TObject);
begin
  SelOKNo(cds_1, false);

end;

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

procedure TfrmCollectList.TBCloseClick(Sender: TObject);
begin

  Close;
end;

procedure TfrmCollectList.btnDelClick(Sender: TObject);
var
  FFFIDS: string;
begin
  if CDS_1.IsEmpty then
    exit;

  if not CDS_1.Locate('SSel', True, []) then
  begin
    application.MessageBox('请选择数据', '提示');
    Exit;
  end;

  with ADOQueryTemp do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status in(''10'', ''12'') ');
    open;
  end;

  if not ADOQueryTemp.IsEmpty then
  begin
    application.MessageBox('计划单已完成或已清算，无法删除', '提示');
    Exit;
  end;

  with CDS_1 do
  begin
    DisableControls;
    while CDS_1.Locate('SSel', True, []) do
    begin
      FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ',';
      CDS_1.Delete;
    end;
    EnableControls;
  end;

  try
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_Del ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
    application.MessageBox('删除成功', '提示');
  except
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    InitGrid();
  end;

end;

procedure TfrmCollectList.FormShow(Sender: TObject);
begin
  inherited;
  ReadCxGrid(trim(Self.Caption), Tv1, '财务管理');
  Enddate.DateTime := SGetServerDate(ADOQueryTemp);
  begdate.DateTime := Enddate.DateTime - 91;
  SetStatus();
  InitGrid();
end;

procedure TfrmCollectList.TBRafreshClick(Sender: TObject);
begin
  begdate.SetFocus;

  InitGrid();

end;

procedure TfrmCollectList.cxGridDBColumn5PropertiesEditValueChanged(Sender: TObject);
var
  mvalue, FFieldName: string;
  FPS, FQty, FPrice, FQTFee, FMoney, FZKMoney: Double;
begin
  FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName);
  mvalue := TcxTextEdit(Sender).EditingText;
  if Trim(mvalue) = '' then
  begin
    mvalue := '0';
  end;

  with CDS_1 do
  begin
    Edit;
    FieldByName(FFieldName).Value := Trim(mvalue);
    Post;
    FPS := CDS_1.fieldbyname('PS').AsFloat;
    FQty := CDS_1.fieldbyname('Qty').AsFloat;
    FQTFee := CDS_1.fieldbyname('QTFee').AsFloat;
    FPrice := CDS_1.fieldbyname('Price').AsFloat;
    FMoney := CDS_1.fieldbyname('Money').AsFloat;

    FZKMoney := CDS_1.fieldbyname('ZKMoney').AsFloat;
  end;

  if Trim(FFieldName) <> 'Money' then
  begin
    FMoney := FQty * FPrice + FQTFee - FZKMoney;
  end;
  with CDS_1 do
  begin
    Edit;
    FieldByName('Money').Value := FMoney;
    Post;
  end;
  with ADOQueryCmd do
  begin
    Close;
    SQL.Clear;
    sql.Add('update Finance_Flow set ' + FFieldName + '=' + Trim(mvalue));
    if Trim(FFieldName) <> 'Money' then
      sql.Add(' ,Money=' + FloatToStr(FMoney));
    sql.Add('where FFID=' + quotedstr(Trim(CDS_1.fieldbyname('FFID').AsString)));
    ExecSQL;
  end;

  Tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmCollectList.btnChkClick(Sender: TObject);
var
  FFFIDS: string;
begin
  if CDS_1.IsEmpty then
    exit;

  if not CDS_1.Locate('SSel', True, []) then
  begin
    application.MessageBox('请选择数据', '提示');
    Exit;
  end;

  with CDS_1 do
  begin
    DisableControls;
    while CDS_1.Locate('SSel', True, []) do
    begin
      FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ',';
      CDS_1.Delete;
    end;
    EnableControls;
  end;

  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_SetStatus_SK ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      sql.Add(',@Operation=''审核'' ');
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_In_Bank_Flow ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
    ADOQueryCmd.Connection.CommitTrans;
    application.MessageBox('审核成功', '提示');
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    InitGrid();
  end;

end;

procedure TfrmCollectList.btnReChkClick(Sender: TObject);
var
  FFFIDS: string;
begin
  if CDS_1.IsEmpty then
    exit;

  if not CDS_1.Locate('SSel', True, []) then
  begin
    application.MessageBox('请选择数据', '提示');
    Exit;
  end;

  with CDS_1 do
  begin
    DisableControls;
    while CDS_1.Locate('SSel', True, []) do
    begin
      with ADOQueryTemp do
      begin
        Close;
        SQL.Clear;
        SQL.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status in(''10'', ''12'') ');
        open;
      end;

      if ADOQueryTemp.IsEmpty = false then
      begin
        application.MessageBox(PChar('计划单' + CDS_1.FieldByName('OrderNo').AsString + '已完成或已清算，无法操作'), '提示');
        Exit;
      end;
      FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ',';
      CDS_1.Delete;
    end;
    EnableControls;
  end;

  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_SetStatus_SK ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      sql.Add(',@Operation=''撤销审核'' ');
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_In_Bank_Flow ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
    ADOQueryCmd.Connection.CommitTrans;

    application.MessageBox('撤销审核成功', '提示');
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    InitGrid();
  end;
end;

procedure TfrmCollectList.Button1Click(Sender: TObject);
begin
  Panel2.Visible := False;
  JHExchangeRate.text := '';
  SXFAmount.text := '';
end;

procedure TfrmCollectList.Button2Click(Sender: TObject);
var
  PJHExchangeRate: string;
  PSXFAmount: string;
begin
  if FFID.Text <> '' then
  begin
    if JHExchangeRate.Text <> '' then
      PJHExchangeRate := JHExchangeRate.Text
    else
      PJHExchangeRate := 'Null';
    if SXFAmount.Text <> '' then
      PSXFAmount := SXFAmount.Text
    else
      PSXFAmount := 'Null';
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPdate Finance_Flow ');
      sql.Add(' Set JHExchangeRate=' + Trim(PJHExchangeRate) + '');
      sql.Add(',SXFAmount=' + Trim(PSXFAmount) + '');
      SQL.Add(' where FFID=''' + Trim(FFID.Text) + '''');
      sql.Add('UPdate Finance_WriteOff ');
      sql.Add(' Set WoJHExchangeRate=' + Trim(PJHExchangeRate) + '');
//      sql.Add(',SXFAmount=''' + Trim(SXFAmount.Text) + '''');
      SQL.Add(' where FromId=''' + Trim(FFID.Text) + '''');
      sql.Add('UPDATE f');
      sql.Add('SET f.WoSXFAmount = ');
      sql.Add('    CASE ');
      sql.Add('        WHEN t.Amount = 0 OR t.Amount IS NULL THEN 0');
      sql.Add('        ELSE (f.WoAmount / t.Amount) * ' + Trim(PSXFAmount) + '');
      sql.Add('    END');
      sql.Add('FROM Finance_WriteOff f');
      sql.Add('CROSS APPLY (');
      sql.Add('    SELECT Amount ');
      sql.Add('    FROM Finance_Flow ');
      sql.Add('    WHERE FFID = ''' + Trim(FFID.Text) + '''');
      sql.Add(') t');
      sql.Add('WHERE f.FromId = ''' + Trim(FFID.Text) + '''');
      sql.Add(' update Costing_Table set HYStatus = 1 where COrderNO in (select B.orderno from Finance_WriteOff A ');
      sql.Add(' inner join Finance_Flow B on A.FromId=B.FFID    ');
      sql.Add(' inner join Finance_Flow C on A.ToId=C.FFID   ');
      sql.Add(' where FromId=''' + Trim(FFID.Text) + ''')');

//      ShowMessage(sql.Text);
      execsql;
    end;

  end;

  Application.MessageBox('保存成功!', '提示', 0);
  Button1.Click;

end;

procedure TfrmCollectList.btnAddClick(Sender: TObject);
begin

  try
    frmCollectInput := TfrmCollectInput.Create(Application);
    with frmCollectInput do
    begin
      FFFID := '';
      if ShowModal = 1 then
      begin
        InitGrid();
      end;
    end;
  finally
    frmCollectInput.Free;
  end;
end;

procedure TfrmCollectList.ToolButton1Click(Sender: TObject);
begin
  try
    frmCollectInput := TfrmCollectInput.Create(Application);
    with frmCollectInput do
    begin
      FFFID := Trim(SELF.CDS_1.fieldbyname('FFID').AsString);
      PState := '复制';
      if ShowModal = 1 then
      begin
        InitGrid();
      end;
    end;
  finally
    frmCollectInput.Free;
  end;

end;

procedure TfrmCollectList.ToolButton2Click(Sender: TObject);
var
  FFFIDS: string;
begin
  if CDS_1.IsEmpty then
    exit;

  if not CDS_1.Locate('SSel', True, []) then
  begin
    application.MessageBox('请选择数据', '提示');
    Exit;
  end;

  with CDS_1 do
  begin
    DisableControls;
    while CDS_1.Locate('SSel', True, []) do
    begin
      FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ',';
      CDS_1.Delete;
    end;
    EnableControls;
  end;

  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_SetStatus_HX ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      sql.Add(',@Operation=''核销完成'' ');
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));

    ADOQueryCmd.Connection.CommitTrans;
    application.MessageBox('核销完成成功', '提示');
    InitGrid();
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    InitGrid();
  end;

end;

procedure TfrmCollectList.ToolButton3Click(Sender: TObject);
var
  FFFIDS: string;
begin
  if CDS_1.IsEmpty then
    exit;

  if not CDS_1.Locate('SSel', True, []) then
  begin
    application.MessageBox('请选择数据', '提示');
    Exit;
  end;

  with CDS_1 do
  begin
    DisableControls;
    while CDS_1.Locate('SSel', True, []) do
    begin
      FFFIDS := FFFIDS + Trim(CDS_1.fieldbyname('FFID').AsString) + ',';
      CDS_1.Delete;
    end;
    EnableControls;
  end;

  try
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_SetStatus_HX ');
      sql.Add(' @FFIDS=' + QuotedStr(FFFIDS));
      sql.Add(',@Operation=''撤销核销'' ');
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));

    ADOQueryCmd.Connection.CommitTrans;
    application.MessageBox('撤销核销成功', '提示');
    InitGrid();
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    InitGrid();
  end;

end;

procedure TfrmCollectList.ToolButton4Click(Sender: TObject);
begin
  if ADOQueryMain.IsEmpty then
    Exit;
  TcxGridToExcel(self.Caption, cxgrid1);
end;

procedure TfrmCollectList.ToolButton5Click(Sender: TObject);
begin
  WriteCxGrid(trim(Self.Caption), Tv1, '财务管理');
end;

procedure TfrmCollectList.ToolButton6Click(Sender: TObject);
begin
  with ADOQueryTemp do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status in(''10'', ''12'') ');
    open;
  end;

  if not ADOQueryTemp.IsEmpty then
  begin
    application.MessageBox('计划单已完成或已清算，无法数据补录', '提示');
    Exit;
  end;

  FFID.text := trim(CDS_1.fieldbyname('FFID').AsString);
  Panel2.Left := (self.width - Panel2.width) div 2;
  Panel2.Top := 330;
  Panel2.Visible := True;

end;

procedure TfrmCollectList.btnEditClick(Sender: TObject);
begin
  with ADOQueryTemp do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select * from Trade_Plan_Main where OrderNo = ' + QuotedStr(CDS_1.FieldByName('OrderNo').AsString) + ' and status in(''10'', ''12'') ');
    open;
  end;

  if not ADOQueryTemp.IsEmpty then
  begin
    application.MessageBox('计划单已完成或已清算，无法修改', '提示');
    Exit;
  end;

  try
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add(' exec P_Fin_Flow_Judge ');
      sql.Add(' @FFIDS=' + QuotedStr(Trim(SELF.CDS_1.fieldbyname('FFID').AsString)));
      Sql.Add(',@DCode=' + quotedstr(Trim(DCode)));
      Sql.Add(',@DName=' + quotedstr(Trim(DName)));
      open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
  except
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    Exit;
  end;

  try
    frmCollectInput := TfrmCollectInput.Create(Application);
    with frmCollectInput do
    begin
      FFFID := Trim(SELF.CDS_1.fieldbyname('FFID').AsString);
      if ShowModal = 1 then
      begin
        InitGrid();
      end;
    end;
  finally
    frmCollectInput.Free;
  end;
end;

procedure TfrmCollectList.ToolButton7Click(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    exit;
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add(' select * from Finance_Flow');
    sql.Add(' where FFID=''' + Trim(CDS_1.fieldbyname('FFID').AsString) + '''');
    SQL.Add(' and status=''9''  ');
    Open;
  end;
  if ADOQueryTemp.IsEmpty then
  begin
    Application.MessageBox('未审核数据，不能操作!', '提示', 0);
    Exit;
  end;

  frmCollectWriteOff := TfrmCollectWriteOff.create(self);
  with frmCollectWriteOff do
  begin
    FFFID := CDS_1.fieldbyname('FFID').AsString;
    FOppCoNo := CDS_1.fieldbyname('OppCoNo').AsString;
    FOurCoName := CDS_1.fieldbyname('OurCoName').AsString;
    if showmodal = 1 then
    begin
//      Initgrid();
    end;
    free;
  end;

end;

procedure TfrmCollectList.ToolButton8Click(Sender: TObject);
begin
  frmCollectWriteOffList := TfrmCollectWriteOffList.create(self);
  with frmCollectWriteOffList do
  begin
    FromId.text := Self.CDS_1.fieldbyname('FFID').AsString;
    if showmodal = 1 then
    begin

    end;
    free;
  end;

end;

procedure TfrmCollectList.ToolButton9Click(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    Exit;
  try
    frmAttachmentUpload := TfrmAttachmentUpload.Create(Application);
    with frmAttachmentUpload do
    begin
      if Trim(Self.CDS_1.fieldbyname('filler').AsString) = dname then
        FEditAuthority := True;
      fkeyNO := Trim(Self.CDS_1.fieldbyname('FFID').AsString);
      fType := 'SD';
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmAttachmentUpload.Free;
  end;

end;

procedure TfrmCollectList.Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if AViewInfo.GridRecord.Values[tv1.GetColumnByFieldName('HXFlag').Index] <> '已核销' then
    ACanvas.Brush.Color := clWebOrange;

end;

procedure TfrmCollectList.OppCoNameKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    InitGrid();
  end;
end;

procedure TfrmCollectList.cxTabControl1Change(Sender: TObject);
begin
  SetStatus();
  InitGrid();
end;

end.

