unit U_Customer;

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, cxDBLookupComboBox, ComObj, cxLookAndFeels, cxLookAndFeelPainters,
  cxNavigator, U_BaseList, dxSkinsCore, dxSkinsDefaultPainters, dxDateRanges,
  dxBarBuiltInMenu, cxPC, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
  FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client, dxScrollbarAnnotations;

type
  TfrmCustomer = class(TfrmBaseList)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBDel: TToolButton;
    TBClose: TToolButton;
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    Panel1: TPanel;
    btnFind: TToolButton;
    ADOQueryMain: TADOQuery;
    Label3: TLabel;
    CoName: TEdit;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    cxGridLevel1: TcxGridLevel;
    GPM_1: TcxGridPopupMenu;
    DS_1: TDataSource;
    CDS_1: TClientDataSet;
    btnAdd: TToolButton;
    v2Column6: TcxGridDBColumn;
    v2Column1: TcxGridDBColumn;
    v2Column2: TcxGridDBColumn;
    v2Column7: TcxGridDBColumn;
    Label1: TLabel;
    CoCode: TEdit;
    v2Column10: TcxGridDBColumn;
    btnEdit: TToolButton;
    Label2: TLabel;
    Salesman: TEdit;
    country: TEdit;
    Label4: TLabel;
    v2Column15: TcxGridDBColumn;
    CDS_2: TClientDataSet;
    DS_2: TDataSource;
    btnSaleser: TToolButton;
    v2Column3: TcxGridDBColumn;
    OpenDialog1: TOpenDialog;
    Tv1Column3: TcxGridDBColumn;
    Tv1Column4: TcxGridDBColumn;
    Tv1Column2: TcxGridDBColumn;
    Panel2: TPanel;
    cxGrid2: TcxGrid;
    Tv2: TcxGridDBTableView;
    v3Column3: TcxGridDBColumn;
    cxGridDBColumn1: TcxGridDBColumn;
    cxGridDBColumn2: TcxGridDBColumn;
    cxGridDBColumn4: TcxGridDBColumn;
    cxGridDBColumn5: TcxGridDBColumn;
    Tv2Column1: TcxGridDBColumn;
    v3Column2: TcxGridDBColumn;
    cxGridLevel2: TcxGridLevel;
    cxTabControl1: TcxTabControl;
    btnChk: TToolButton;
    btnReChk: TToolButton;
    Tv1Column1: TcxGridDBColumn;
    btnTallyer: TToolButton;
    Tv1Column5: TcxGridDBColumn;
    Tv1Column6: TcxGridDBColumn;
    ToolButton1: TToolButton;
    GPM_2: TcxGridPopupMenu;
    ToolButton3: TToolButton;
    Tv1Column7: TcxGridDBColumn;
    FDQuery1: TFDQuery;
    ToolButton2: TToolButton;
    ToolButton4: TToolButton;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure TBDelClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure btnFindClick(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure TBuserClick(Sender: TObject);
    procedure Tv1FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
    procedure btnSaleserClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CoCodeKeyPress(Sender: TObject; var Key: Char);
    procedure btnChkClick(Sender: TObject);
    procedure btnReChkClick(Sender: TObject);
    procedure cxTabControl1Change(Sender: TObject);
    procedure btnTallyerClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure CoCodeChange(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
  private
    fFlileFlag: string;
    { Private declarations }
    procedure InitGrid();
    procedure SetStatus();
  public
    FAuthority: string;
  end;

var
  frmCustomer: TfrmCustomer;

implementation

uses
  U_DataLink, U_RTFun, U_ZDYHelp, U_CustomerInput, U_CustInput, U_UserSel,
  U_AttachmentUpload, U_CustomerImport, U_wechatSel;

{$R *.dfm}
procedure TfrmCustomer.SetStatus();
begin
  btnSaleser.Enabled := false;     //指定
  btnTallyer.Enabled := false;     //指定
  btnChk.Enabled := false;     //审核
  btnReChk.Enabled := false;     //撤销

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

  if Trim(FAuthority) = '管理' then
  begin
    btnSaleser.Enabled := true;
    btnTallyer.Enabled := true;
    btnAdd.Enabled := true;

    case cxTabControl1.TabIndex of
      0:
        begin
          btnEdit.Enabled := true;
          TBDel.Enabled := true;
          btnChk.Enabled := true;
        end;
      1:
        begin
          btnEdit.Enabled := true;
          btnReChk.Enabled := true;
        end;
      2:
        begin

        end;
    end;
  end
  else
  begin
    btnAdd.Enabled := true;
    case cxTabControl1.TabIndex of
      0:
        begin
          btnEdit.Enabled := true;
          TBDel.Enabled := true;
        end;
      1:
        begin

        end;
      2:
        begin

        end;
    end;
  end;
end;

procedure TfrmCustomer.InitGrid();
var
  WSql, FCoCode: string;
begin
  WSql := SGetFilters(Panel1, 1, 2);
  if trim(WSql) <> '' then
  begin
    WSql := ' and ' + trim(WSql);
  end;
  if not CDS_1.IsEmpty then
    FCoCode := CDS_1.FieldByName('CoCode').AsString;

  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Filtered := False;
      Close;
      SQL.Clear;
      sql.Add(' select * from BS_Company  ');
      sql.Add(' where 1=1 ' + (WSql));
      sql.Add(' and CoType=''客户'' and Valid=''Y'' ');

      if Trim(FAuthority) = '录入' then
      begin
        sql.Add(' and ( SalesId=' + quotedstr(trim(DCode)) + ' or exists (select * from [dbo].[F_Tool_SplitString](TallyId,'','') X where X.RTValue =' + quotedstr(trim(DCode)) + '))');
      end;

      case cxTabControl1.TabIndex of
        0:
          begin
            sql.Add(' and  status=''0''');
          end;
        1:
          begin
            sql.Add(' and  status=''1''');
          end;
      end;
      SQL.Add(' ORDER BY CoCode ');
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);

    CDS_1.Locate('CoCode', FCoCode, []);
  finally
    ADOQueryMain.EnableControls;
  end;

//  with FDQuery1 do
//  begin
//
//    SQL.Clear;
//    sql.Add(' select * from BS_Company  ');
//    sql.Add(' where 1=1 ' + (WSql));
//    sql.Add(' and CoType=''客户'' and Valid=''Y'' ');
//    open;
//  end;
end;

procedure TfrmCustomer.FormDestroy(Sender: TObject);
begin
  inherited;
  frmCustomer := nil;
end;

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

procedure TfrmCustomer.TBCloseClick(Sender: TObject);
begin

  Close;
end;

procedure TfrmCustomer.TBDelClick(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    Exit;
  if not CDS_1.Locate('SSel', true, []) then
  begin
    Application.MessageBox('请选择数据!', '提示', 0);
    Exit;
  end;
  if Application.MessageBox('确定要删除数据吗？', '提示', 32 + 4) <> IDYES then
    Exit;

  if Trim(CDS_1.fieldbyname('COID').AsString) <> '' then
  begin
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('exec P_BS_Com_Del @COID=' + quotedstr(trim(CDS_1.fieldbyname('COID').AsString)));
      sql.Add(',@DCode=' + quotedstr(trim(DCode)));
      sql.Add(',@DName=' + quotedstr(trim(DName)));
      ExecSQL;
    end;
  end;
  CDS_1.Delete;

end;

procedure TfrmCustomer.FormShow(Sender: TObject);
begin
  inherited;
  fFlileFlag := UserDataFlag + 'HX';
  FAuthority := self.fParameters1;
  ReadCxGrid(trim(self.caption) + 'Tv1', Tv1, '客户管理');
  ReadCxGrid(trim(self.caption) + 'Tv2', Tv2, '客户管理');
  SetStatus();
  InitGrid();
end;

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

procedure TfrmCustomer.ToolButton1Click(Sender: TObject);
begin
  WriteCxGrid(trim(self.caption) + 'Tv1', Tv1, '客户管理');
  WriteCxGrid(trim(self.caption) + 'Tv2', Tv2, '客户管理');
end;

procedure TfrmCustomer.ToolButton2Click(Sender: TObject);
begin
  try
    frmCustomerImport := TfrmCustomerImport.Create(Application);
    with frmCustomerImport do
    begin
      if ShowModal = 1 then
      begin
        self.InitGrid();
      end;
    end;
  finally
    frmCustomerImport.Free;
  end;
end;

procedure TfrmCustomer.btnFindClick(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);
  end;
end;

procedure TfrmCustomer.ToolButton3Click(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    Exit;
  try
    frmAttachmentUpload := TfrmAttachmentUpload.Create(Application);
    with frmAttachmentUpload do
    begin
      if (Trim(FAuthority) = '录入') or (Trim(FAuthority) = '管理') then
        FEditAuthority := True;
      fkeyNO := Trim(Self.CDS_1.fieldbyname('Coid').AsString);
      fType := '客户';
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmAttachmentUpload.Free;
  end;

end;

procedure TfrmCustomer.ToolButton4Click(Sender: TObject);
var
  FUserId: string;
begin
  if CDS_2.IsEmpty then
    Exit;
  FUserId := Trim(Self.CDS_2.FieldByName('CcID').AsString);
  try
    frmwechatSel := TfrmwechatSel.Create(Self);
    with frmwechatSel do
    begin
//      FGsName:='SW';
      if ShowModal = 1 then
      begin
        with ADOQueryCmd do
        begin
          Close;
          SQL.Clear;
          SQL.Add(' update Bs_Company_contact set wechatid=' + QuotedStr(Trim(frmwechatSel.CDS_1.FieldByName('OPENID').AsString)));
          SQL.Add(',wechat=' + QuotedStr(Trim(frmwechatSel.CDS_1.FieldByName('NICKNAME').AsString)));
          SQL.Add(' where CCID=' + QuotedStr(Trim(FUserId)));
          ExecSQL;
        end;
        Self.InitGrid();
        Self.CDS_2.Locate('CCID', Trim(FUserId), []);
      end;
    end;
  finally
    frmwechatSel.Free;
  end;
end;

procedure TfrmCustomer.CoCodeChange(Sender: TObject);
begin

  btnFind.Click;
end;

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

procedure TfrmCustomer.cxTabControl1Change(Sender: TObject);
begin
  SetStatus();
  TBRafresh.Click;
end;

procedure TfrmCustomer.btnEditClick(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    exit;
  try
    frmCustInput := TfrmCustInput.Create(Application);
    with frmCustInput do
    begin
      fFlileFlag := self.fFlileFlag;
      FCOID := Trim(Self.CDS_1.fieldbyname('COID').AsString);
      if ShowModal = 1 then
      begin
        TBRafresh.Click;
      end;
    end;
  finally
    frmCustInput.Free;
  end;
end;

procedure TfrmCustomer.btnTallyerClick(Sender: TObject);
var
  MTallyId, MTallyer: string;
begin
  MTallyId := '';
  MTallyer := '';
  if not CDS_1.Locate('SSel', true, []) then
  begin
    Application.MessageBox('请选择数据!', '提示', 0);
    Exit;
  end;
  try
    frmUserSel := TfrmUserSel.Create(Application);
    with frmUserSel do
    begin
      Fdept := '理单';
      FMultiple := True;
      if ShowModal = 1 then
      begin
        while frmUserSel.CDS_1.Locate('SSel', True, []) do
        begin
          MTallyId := MTallyId + Trim(CDS_1.FieldByName('UserID').AsString) + ',';
          MTallyer := MTallyer + Trim(CDS_1.FieldByName('UserName').AsString) + ',';
          frmUserSel.CDS_1.Delete;
        end;
      end;
    end;
  finally
    frmUserSel.Free;
  end;
  if MTallyId = '' then
    Exit;
  MTallyId := copy(MTallyId, 1, Length(MTallyId) - 1);
  MTallyer := copy(MTallyer, 1, Length(MTallyer) - 1);
  while CDS_1.Locate('SSel', True, []) do
  begin
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('update BS_Company set TallyId=' + quotedstr(trim(MTallyId)));
      sql.Add(' ,Tallyer=' + quotedstr(trim(MTallyer)));
      sql.Add(' where COID=''' + Trim(CDS_1.fieldbyname('COID').AsString) + '''');
      ExecSQL;
    end;
    CDS_1.Delete;
  end;
  InitGrid();
end;

procedure TfrmCustomer.btnChkClick(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    exit;
  if not CDS_1.Locate('SSel', true, []) then
  begin
    Application.MessageBox('请选择数据!', '提示', 0);
    Exit;
  end;
  try
    with CDS_1 do
    begin
      DisableControls;
      First;
      while not eof do
      begin
        if fieldbyname('SSel').AsBoolean then
        begin
          with ADOQueryCmd do
          begin
            close;
            sql.Clear;
            sql.Add('update  BS_Company SET status=''1'',Chktime=getdate(),Chker=' + quotedstr(trim(DName)));
            sql.Add('where CoID=' + quotedstr(trim(CDS_1.fieldbyname('CoID').AsString)));
            execsql;
          end;
        end;
        next;
      end;
      First;
      EnableControls;
    end;
    application.MessageBox('审核成功！', '提示信息');
    TBRafresh.Click;
  except
    application.MessageBox('审核失败！', '提示信息', 0);
  end;
end;

procedure TfrmCustomer.btnReChkClick(Sender: TObject);
begin
  if CDS_1.IsEmpty then
    exit;
  if not CDS_1.Locate('SSel', true, []) then
  begin
    Application.MessageBox('请选择数据!', '提示', 0);
    Exit;
  end;
  try
    with CDS_1 do
    begin
      DisableControls;
      First;
      while not eof do
      begin
        if fieldbyname('SSel').AsBoolean then
        begin
          with ADOQueryCmd do
          begin
            close;
            sql.Clear;
            sql.Add('update  BS_Company SET status=''0'',Chktime=null,Chker=null ');
            sql.Add('where CoID=' + quotedstr(trim(CDS_1.fieldbyname('CoID').AsString)));
            execsql;
          end;
        end;
        next;
      end;
      First;
      EnableControls;
    end;
    application.MessageBox('撤销审核成功！', '提示信息');
    TBRafresh.Click;
  except
    application.MessageBox('撤销审核失败！', '提示信息', 0);
  end;
end;

procedure TfrmCustomer.btnAddClick(Sender: TObject);
begin
  try
    frmCustInput := TfrmCustInput.Create(Application);
    with frmCustInput do
    begin
      FCOID := '';
      fFlileFlag := self.fFlileFlag;
      if ShowModal = 1 then
      begin
        InitGrid();
      end;
    end;
  finally
    frmCustInput.Free;
  end;
end;

procedure TfrmCustomer.TBuserClick(Sender: TObject);
var
  FuserName: string;
begin

end;

procedure TfrmCustomer.Tv1FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
  with ADOQueryTemp do
  begin
    Filtered := False;
    Close;
    SQL.Clear;
    sql.Add(' select * from BS_Company_contact where COID=' + quotedstr(Trim(CDS_1.FieldByName('COID').AsString)));
    Open;
  end;
  SCreateCDS(ADOQueryTemp, CDS_2);
  SInitCDSData(ADOQueryTemp, CDS_2);

end;

procedure TfrmCustomer.btnSaleserClick(Sender: TObject);
var
  MSaleser, MSalesId: string;
begin
  try
    frmUserSel := TfrmUserSel.Create(Application);
    with frmUserSel do
    begin
      Fdept := '业务';
      if ShowModal = 1 then
      begin
        MSalesId := Trim(CDS_1.fieldbyname('UserID').AsString);
        MSaleser := Trim(CDS_1.fieldbyname('UserName').AsString);
      end;
    end;
  finally
    frmUserSel.Free;
  end;

  if MSalesId = '' then
    Exit;

  with ADOQueryCmd do
  begin
    Close;
    SQL.Clear;
    sql.Add('update BS_Company set  Saleser=' + quotedstr(trim(MSaleser)));
    sql.Add(' ,SalesId=' + quotedstr(trim(MSalesId)));
    sql.Add(' where COID=''' + Trim(CDS_1.fieldbyname('COID').AsString) + '''');
    ExecSQL;
  end;

  initgrid();
end;

procedure TfrmCustomer.FormCreate(Sender: TObject);
begin
  inherited;
  FAuthority := trim(fParameters1);
end;

end.

