unit U_frameRGQXList;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, cxGraphics,
  cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit,
  cxStyles, cxCustomData, cxFilter, cxData, cxDataStorage, cxNavigator,
  dxDateRanges, dxScrollbarAnnotations, Data.DB, cxDBData, cxCheckBox,
  cxTextEdit, dxBarBuiltInMenu, Vcl.Menus, cxGridCustomPopupMenu,
  cxGridPopupMenu, Datasnap.DBClient, Data.Win.ADODB, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxGridCustomView, cxGrid, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ToolWin,
  Vcl.ExtCtrls, dxSkinsCore, dxSkinsDefaultPainters, cxMemo, cxLabel, cxMaskEdit,
  cxDropDownEdit, cxButtonEdit, cxButtons;

type
  TframeRGQXList = class(TFrame)
    ADOQueryMain: TADOQuery;
    ADOQueryCmd: TADOQuery;
    ADOQueryTemp: TADOQuery;
    CDS_HZ: TClientDataSet;
    DS_HZ: TDataSource;
    cxGridPopupMenu2: TcxGridPopupMenu;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Panel_rgqx: TPanel;
    LabelRGQX: TLabel;
    cxLabel114: TcxLabel;
    cxLabel150: TcxLabel;
    cxLabel165: TcxLabel;
    rgqx_daoSet: TcxTextEdit;
    rgqx_speed: TcxTextEdit;
    rgqx_waterTemper: TcxTextEdit;
    cxGrid3: TcxGrid;
    TvRGQX: TcxGridDBTableView;
    cxGridDBColumn1: TcxGridDBColumn;
    cxGridDBColumn7: TcxGridDBColumn;
    TvRGQXserialno: TcxGridDBColumn;
    cxGridLevel2: TcxGridLevel;
    cxLabel2: TcxLabel;
    TbRGQXAdd: TcxButton;
    TbRGQXDel: TcxButton;
    rgqx_note: TcxMemo;
    CDS_RGQX: TClientDataSet;
    DS_rgqx: TDataSource;
    TvRGQXrgqx_spel: TcxGridDBColumn;
    TvRGQXrgqx_unit: TcxGridDBColumn;
    TvRGQXBPIID: TcxGridDBColumn;
    procedure TBRafreshClick(Sender: TObject);

    procedure ToolButton5Click(Sender: TObject);
    procedure TbRGQXAddClick(Sender: TObject);
    procedure TbRGQXDelClick(Sender: TObject);
    procedure cxGridDBColumn1PropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure cxGridDBColumn7PropertiesEditValueChanged(Sender: TObject);

  private

    { Private declarations }
  public
    procedure InitGrid();
    function SaveData(mPSID: string): Boolean;
    { Public declarations }
  end;

implementation

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

procedure TframeRGQXList.cxGridDBColumn1PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  try
    frmProductInfoSel := TfrmProductInfoSel.Create(Application);
    with frmProductInfoSel do
    begin
      FSTKName := '助剂';
      if ShowModal = 1 then
      begin
        with Self.CDS_RGQX do
        begin
          Edit;
          FieldByName('rgqx_Name').Value := frmProductInfoSel.CDS_1.fieldbyname('P_Name').value;
          FieldByName('rgqx_spel').Value := frmProductInfoSel.CDS_1.fieldbyname('P_Type').value;

          FieldByName('rgqx_unit').Value := frmProductInfoSel.CDS_1.fieldbyname('QtyUnit').value;
          FieldByName('BPIID').Value := frmProductInfoSel.CDS_1.fieldbyname('BPIID').value;
        end;
      end;
    end;
  finally
    frmProductInfoSel.Free;
  end;
end;

procedure TframeRGQXList.cxGridDBColumn7PropertiesEditValueChanged(
  Sender: TObject);
var
  s: string;
  fValue: Double;
begin
  s := TcxTextEdit(Sender).EditingText;

  if (s <> '') and (s[Length(s)] <> '%') then
  begin
    try
      // 尝试将字符串转换为浮点数
      fValue := StrToFloat(s);
      // 格式化为两位小数并添加百分号
      Tvrgqx.Controller.FocusedColumn.EditValue := FormatFloat('0.00', fValue) + '%';
    except
      on E: EConvertError do
      begin
        // 如果转换失败，保持原样并添加百分号
        Tvrgqx.Controller.FocusedColumn.EditValue := s + '%';
      end;
    end;
  end;
end;

procedure TframeRGQXList.InitGrid();
begin
//  POSNO.SetFocus;
//  try
//    ADOQueryMain.DisableControls;
//    with ADOQueryMain do
//    begin
//      Close;
//      SQL.Clear;
//      sql.Add(' select A.* from  BS_Position A order by POSNO ');
//      Open;
//    end;
//    SCreateCDS(ADOQueryMain, CDS_HZ);
//    SInitCDSData(ADOQueryMain, CDS_HZ);
//  finally
//    ADOQueryMain.EnableControls;
//    ToolButton2.Click;
//  end;
end;

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

procedure TframeRGQXList.TbRGQXAddClick(Sender: TObject);
begin
  with CDS_RGQX do
  begin
    Append;
    CDS_RGQX.FieldByName('serialno').Value := CDS_RGQX.RecordCount + 1;
    Post;
  end;
end;

procedure TframeRGQXList.TbRGQXDelClick(Sender: TObject);
var
  i: Integer;
begin
  if not CDS_RGQX.IsEmpty then
  begin

    if Application.MessageBox('确定要删除数据吗？', '提示', 32 + 4) = IDYES then
    begin
      if Trim(CDS_RGQX.fieldbyname('BCPID').AsString) <> '' then
      begin
        with ADOQueryCmd do
        begin
          Close;
          sql.Clear;
          sql.Add('delete BS_Cloth_GY_Sub where BCPID=' + quotedStr(Trim(CDS_RGQX.fieldbyname('BCPID').AsString)));
          ExecSQL;
        end;
      end;
      CDS_RGQX.Delete;
    end
    else
      exit;

    i := 0;
    CDS_RGQX.First;
    while not CDS_RGQX.Eof do
    begin
      i := i + 1;
      CDS_RGQX.Edit;
      CDS_RGQX.fieldByName('serialno').value := i;
      CDS_RGQX.Post;
      CDS_RGQX.Next;
    end;
  end
  else
  begin
    Application.MessageBox('无可删除数据!', '提示', 0);
    Exit;
  end;
end;

procedure TframeRGQXList.ToolButton5Click(Sender: TObject);
begin
  if CDS_HZ.IsEmpty then
    Exit;

  if CDS_HZ.Locate('SSel', True, []) = False then
  begin
    Application.MessageBox('请先选择数据！', '提示', 0);
    Exit;
  end;

  if Application.MessageBox('确定要删除数据吗？', '提示', 32 + 4) <> IDYES then
    Exit;

  with CDS_HZ do
  begin
    while not Eof do
    begin
      if CDS_HZ.Locate('SSel', True, []) = True then
      begin
        with ADOQueryCmd do
        begin
          Close;
          sql.Clear;
          sql.Add('delete BS_Position where POSID=' + QuotedStr(CDS_HZ.FieldByName('POSID').AsString));
          ExecSQL;
        end;
      end;

      CDS_HZ.Edit;
      CDS_HZ.FieldByName('SSel').Value := False;
      CDS_HZ.Post;
      Next;
    end;
  end;
  InitGrid();
end;

function TframeRGQXList.SaveData(mPSID: string): Boolean;
var
  MaxProcessID, MaxBCPID, MaxPSID, MaxDTMID, mDTMID, DTMPSlist: string;
  maxsubid1, maxsubid2, maxsubid3, maxsubid4, maxsubid5, maxsubid6, mmaxgx: string;
begin
  try


////////////////       保存主表      //////////////////////
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('select * from Bs_Cloth_GY_Main where PSID=''' + Trim(mPSID) + '''');
      Open;
    end;
    with ADOQueryCmd do
    begin
      if Trim(mPSID) = '' then
      begin
        Append;
      end
      else
      begin
        Edit;
      end;
      FieldByName('PSID').Value := Trim(mPSID);

      RTSetsavedata(ADOQueryCmd, 'Bs_Cloth_GY_Main', Panel_rgqx, 2);
      ADOQueryCmd.Post;

          //////////////////       保存卷染缸清洗子表          //////////////////////
      with CDS_RGQX do
      begin
        First;
        while not Eof do
        begin

          if Trim(CDS_RGQX.fieldbyname('BCPID').AsString) = '' then
          begin
            if GetLSNo(ADOQueryTemp, maxsubid2, 'RGQX', 'Bs_Cloth_GY_Sub', 5, 1) = False then
            begin
              Application.MessageBox('取配比子流水号失败！', '提示', 0);
              Exit;
            end;
          end
          else
          begin
            maxsubid2 := Trim(CDS_RGQX.fieldbyname('BCPID').AsString);
          end;

          with ADOQueryCmd do
          begin
            Close;
            SQL.Clear;
            sql.Add('select * from Bs_Cloth_GY_Sub where ');
            sql.Add('  BCPID=''' + Trim(maxsubid2) + '''');
            Open;
          end;
          with ADOQueryCmd do
          begin
            if Trim(CDS_RGQX.fieldbyname('BCPID').AsString) = '' then
            begin
              Append;

            end
            else
            begin
              Edit;

            end;
            FieldByName('GYType').Value := '卷染缸清洗';
            FieldByName('PSID').Value := Trim(mPSID);
            FieldByName('BCPID').Value := Trim(maxsubid2);
            RTSetSaveDataCDS(ADOQueryCmd, TvRGQX, CDS_RGQX, 'Bs_Cloth_GY_Sub', 0);
            Post;
          end;

          Next;
        end;

////////////////       保存卷染缸清洗子表结束          //////////////////////

      end;

    end;
////////////////       保存主表结束          //////////////////////



//    FPSID := maxId;
    Result := True;
  except
    Result := False;

    Application.MessageBox('保存失败!', '提示', 0);
  end;
end;

end.

