unit U_TradeDeliveryRequestInPut;

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, cxCalendar, StrUtils,
  cxDropDownEdit, cxGridCustomPopupMenu, cxGridPopupMenu, cxLookAndFeels,
  cxLookAndFeelPainters, cxNavigator, dxSkinsCore, dxSkinsDefaultPainters,
  dxDateRanges, dxBarBuiltInMenu, U_BaseList, dxSkinWXI, dxScrollbarAnnotations;

type
  TfrmTradeDeliveryRequestInPut = class(Tform)
    ToolBar1: TToolBar;
    TBSave: TToolButton;
    TBClose: TToolButton;
    ScrollBox1: TScrollBox;
    ToolBar2: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    ADOTemp: TADOQuery;
    ADOCmd: TADOQuery;
    DataSource1: TDataSource;
    Order_Sub: TClientDataSet;
    ADOQuery1: TADOQuery;
    cxGridPopupMenu2: TcxGridPopupMenu;
    Label1: TLabel;
    OutType: TComboBox;
    Note: TEdit;
    Label12: TLabel;
    Label11: TLabel;
    ToCoName: TBtnEditC;
    v1Column1: TcxGridDBColumn;
    cv1Column3: TcxGridDBColumn;
    cxStyleRepository1: TcxStyleRepository;
    dazi1: TcxStyle;
    v1Column2: TcxGridDBColumn;
    v1Column5: TcxGridDBColumn;
    v1Column6: TcxGridDBColumn;
    v1Column7: TcxGridDBColumn;
    Label2: TLabel;
    DlyDate: TDateTimePicker;
    Tv1Column2: TcxGridDBColumn;
    ToolButton3: TToolButton;
    Tv1Column3: TcxGridDBColumn;
    Tv1Column6: TcxGridDBColumn;
    ToolButton4: TToolButton;
    Label27: TLabel;
    QtyUnit: TComboBox;
    Tv1Column1: TcxGridDBColumn;
    Tv1Column4: TcxGridDBColumn;
    Tv1Column5: TcxGridDBColumn;
    Tv1Column7: TcxGridDBColumn;
    MainId: TEdit;
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBSaveClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToCoNameBtnUpClick(Sender: TObject);
    procedure ToCoNameBtnDnClick(Sender: TObject);
    procedure JSQtyUnitChange(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
  private
    fuserName: string;
    procedure InitData();
    function SaveData(): Boolean;
    function CheckHasPostProcessPlan(const AOrderNo: string): Boolean;
    { Private declarations }
  public
    PState, CopyInt: Integer;
    FDRMID: string;
    { Public declarations }
  end;

var
  frmTradeDeliveryRequestInPut: TfrmTradeDeliveryRequestInPut;
  newh: hwnd;

implementation

uses
  U_DataLink, U_ZDYHelp, U_RTFun, U_TradePlanSel, U_TradeSalesContractSel,
  U_CompanySel, U_DeliTradePlanSel;

{$R *.dfm}

function TfrmTradeDeliveryRequestInPut.CheckHasPostProcessPlan(const AOrderNo: string): Boolean;
begin
  Result := False;
  if Trim(AOrderNo) = '' then Exit;

  with ADOTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT TOP 1 1');
    SQL.Add('FROM Pur_ClothPlan_Main A');
    SQL.Add('INNER JOIN Pur_ClothPlan_Sub B ON A.PurMid = B.PurMid');
    SQL.Add('INNER JOIN Trade_Plan_Sub C ON B.SubId = C.SubId');
    SQL.Add('INNER JOIN Trade_Plan_Main D ON C.MainId = D.MainId');
    SQL.Add('WHERE A.PurType = ''后加工''');
    SQL.Add('  AND A.Status <> ''-1''');
    SQL.Add('  AND D.OrderNo = :OrderNo');
    Parameters.ParamByName('OrderNo').Value := Trim(AOrderNo);
    Open;

    Result := not IsEmpty;
    Close;
  end;
end;

procedure TfrmTradeDeliveryRequestInPut.TBCloseClick(Sender: TObject);
begin
  Close;

end;

procedure TfrmTradeDeliveryRequestInPut.InitData();
var
  fsj: string;
begin
  if PState = 0 then
  begin
    DlyDate.DateTime := strtodatetime(Trim(FormatDateTime('yyyy-MM-dd', Now)));

  end;
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    sql.Add(' select A.*  ');
    sql.Add(' from Trade_Cloth_DR_Sub A');
    if PState = 1 then
    begin
      sql.Add('where DRMID=''' + Trim(FDRMID) + '''');
    end;
    if PState = 0 then
    begin
      sql.Add(' where 1<>1');
    end;
    Open;
  end;
  SCreateCDS(ADOQuery1, Order_Sub);
  SInitCDSData(ADOQuery1, Order_Sub);

  with ADOQuery1 do
  begin
    Close;
    sql.Clear;
    sql.Add('select A.* ');
    sql.Add(' from Trade_Cloth_DR_Main A');
    sql.Add(' where DRMID=''' + Trim(FDRMID) + ''' ');
    Open;
  end;
  SCSHData(ADOQuery1, ScrollBox1, 1);

end;

procedure TfrmTradeDeliveryRequestInPut.JSQtyUnitChange(Sender: TObject);
begin
  if not Order_Sub.IsEmpty then
  begin

    exit;
  end;
end;

procedure TfrmTradeDeliveryRequestInPut.FormShow(Sender: TObject);
var
  fsj: string;
begin

  readCxGrid(trim(self.Caption), Tv1, '发货管理');

  InitData();
end;

function TfrmTradeDeliveryRequestInPut.SaveData(): Boolean;
var
  MaxMid, MaxSid: string;
begin
  try
    ADOCmd.Connection.BeginTrans;
    /////////////////              保存主表                /////////////////
    if Trim(FDRMID) = '' then
    begin
      if GetLSNo(ADOCmd, MaxMid, 'DM', 'Trade_Cloth_DR_Main', 4, 1) = False then
        raise Exception.Create('取最大号失败！');
    end
    else
    begin
      MaxMid := Trim(FDRMID);
    end;
    with ADOCmd do
    begin
      Close;
      sql.Clear;
      SQL.Add('select * from Trade_Cloth_DR_Main where DRMID=''' + Trim(MaxMid) + '''');
      Open;
    end;
    with ADOCmd do
    begin
      if Trim(FDRMID) = '' then
      begin
        Append;
        FieldByName('FillID').Value := Trim(DCode);
        FieldByName('Filler').Value := Trim(DName);
      end
      else
      begin
        Edit;
        FieldByName('EditID').Value := Trim(DCode);
        FieldByName('Editer').Value := Trim(DName);
        FieldByName('EditTime').Value := SGetServerDateTime(ADOTemp);
      end;
      RTSetsavedata(ADOCmd, 'Trade_Cloth_DR_Main', ScrollBox1, 1);
      FieldByName('DRMID').Value := Trim(MaxMid);
      FieldByName('Status').Value := '0';
      Post;
    end;
  /////////////////              保存主表                /////////////////
  ///
  /////////////////              保存子表                /////////////////
    Order_Sub.DisableControls;
    with Order_Sub do
    begin
      First;
      while not Eof do
      begin
        if Trim(Order_Sub.fieldbyname('DRSID').AsString) = '' then
        begin
          if GetLSNo(ADOCmd, MaxSid, 'DS', 'Trade_Cloth_DR_Sub', 4, 1) = False then
            raise Exception.Create('取子流水号失败！');
        end
        else
        begin
          MaxSid := Trim(Order_Sub.fieldbyname('DRSID').AsString);
        end;

        with ADOCmd do
        begin
          Close;
          SQL.Clear;
          sql.Add('select * from Trade_Cloth_DR_Sub ');
          sql.Add(' where DRMID=''' + Trim(MaxMid) + '''');
          sql.Add(' and DRSID=''' + Trim(MaxSid) + '''');
          Open;
          if ADOCmd.IsEmpty then
          begin
            Append;
          end
          else
          begin
            Edit;
          end;
          RTSetSaveDataCDS(ADOCmd, Tv1, Order_Sub, 'Trade_Cloth_DR_Sub', 0);
          FieldByName('DRMID').Value := Trim(MaxMid);
          FieldByName('DRSID').Value := Trim(MaxSid);
          FieldByName('QtyUnit').Value := QtyUnit.Text;
          FieldByName('MainId').Value := Order_Sub.fieldbyname('MainId').Value;
          FieldByName('SubId').Value := Order_Sub.fieldbyname('SubId').Value;
          FieldByName('ConMId').Value := Order_Sub.fieldbyname('ConMId').Value;
          FieldByName('ConSId').Value := Order_Sub.fieldbyname('ConSId').Value;
          Post;
        end;
        Order_Sub.Edit;
        Order_Sub.FieldByName('DRSID').Value := Trim(MaxSid);
        Next;
      end;
    end;
    Order_Sub.EnableControls;
   /////////////////              保存子表                /////////////////
    FDRMID := Trim(MaxMid);
    ADOCmd.Connection.CommitTrans;
    Result := True;
  except
    ADOCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
    Result := False;
  end;
end;

procedure TfrmTradeDeliveryRequestInPut.TBSaveClick(Sender: TObject);
var
  Freal: Double;
  FOrderNo: string;
begin
  ToolBar1.SetFocus;

  if Trim(ToCoName.Text) = '' then
  begin
    Application.MessageBox('收货单位不能为空！', '提示', 0);
    Exit;
  end;
  if Trim(QtyUnit.Text) = '' then
  begin
    Application.MessageBox('数量单位不能为空！', '提示', 0);
    Exit;
  end;
  if (Order_Sub.Locate('Piece', null, [])) = True then
  begin
    Application.MessageBox('细码申请匹数不能为空！', '提示', 0);
    Exit;
  end;
  if (Order_Sub.Locate('Qty', null, [])) = True then
  begin
    Application.MessageBox('细码申请数量不能为空！', '提示', 0);
    Exit;
  end;
  if Trim(OutType.Text) = '' then
  begin
    Application.MessageBox('出库类型不能为空！', '提示', 0);
    Exit;
  end;

  if Trim(OutType.Text) = '加工出库' then
  begin
    Order_Sub.DisableControls;
    try
      Order_Sub.First;
      while not Order_Sub.Eof do
      begin
        FOrderNo := Trim(Order_Sub.FieldByName('OrderNo').AsString);
        if FOrderNo = '' then
        begin
          Application.MessageBox('存在空的计划单号，无法进行加工出库！', '提示', 0);
          Exit;
        end;

        if not CheckHasPostProcessPlan(FOrderNo) then
        begin
          Application.MessageBox(PChar('计划单号【' + FOrderNo + '】未创建后加工计划单，不允许加工出库！'), '提示', 0);
          Exit;
        end;

        Order_Sub.Next;
      end;
    finally
      Order_Sub.EnableControls;
    end;
  end;

  if SaveData() then
  begin
    Application.MessageBox('保存成功！', '提示', 0);
    ModalResult := 1;
  end;
end;

procedure TfrmTradeDeliveryRequestInPut.ToolButton1Click(Sender: TObject);
var
  FQtyUnit, FFSubid: string;
begin
  if OutType.Text = '' then
  begin
    Application.MessageBox('出库类型不能为空！', '提示', 0);
    Exit;
  end
  else
  begin
    try
      frmDeliTradePlanSel := TfrmDeliTradePlanSel.Create(Application);
      with frmDeliTradePlanSel do
      begin
        FOutType := Self.OutType.Text;
        FMainID := MainID.Text;
        if ShowModal = 1 then
        begin
          while CDS_1.locate('SSel', true, []) do
          begin
            begin
              with Self.Order_Sub do
              begin
                Append;
                FieldByName('OrderNo').Value := Trim(frmDeliTradePlanSel.CDS_1.fieldbyname('Orderno').AsString);
                FieldByName('ConNo').Value := Trim(frmDeliTradePlanSel.CDS_1.fieldbyname('ConNo').AsString);
                FieldByName('ConMId').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('ConMId').Value;
                FieldByName('ConSId').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('ConSId').Value;
                FieldByName('MainId').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('MainId').Value;
                FieldByName('SubId').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('SubId').Value;
                FieldByName('C_Code').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Code').Value;
                FieldByName('C_Name').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Name').Value;
                FieldByName('C_Composition').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Composition').Value;
                FieldByName('C_Spec').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Spec').Value;
                FieldByName('C_Width').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Width').Value;
                FieldByName('C_GramWeight').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_GramWeight').Value;
                FieldByName('C_Color').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Color').Value;
                FieldByName('C_ColorNo').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_ColorNo').Value;
                FieldByName('C_Pattern').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_Pattern').Value;
                FieldByName('C_StyleNo').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('C_StyleNo').Value;
                FieldByName('BuyConNo').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('BuyConNo').Value;
                FieldByName('Price').Value := frmDeliTradePlanSel.CDS_1.fieldbyname('ConPrice').Value;
                MainId.text := frmDeliTradePlanSel.CDS_1.fieldbyname('MainID').value;
                if OutType.Text = '转单出库' then
                begin
                  ToCoName.text := frmDeliTradePlanSel.CDS_1.fieldbyname('CustName').Value;
                end
                else if OutType.Text = '加工出库' then
                begin
                  ToCoName.text := '';
                end;

                FQtyUnit := frmDeliTradePlanSel.CDS_1.fieldbyname('OrdUnit').Value;
                if FQtyUnit = 'M' then
                begin
                  QtyUnit.ItemIndex := 0;
                end
                else if FQtyUnit = 'Y' then
                begin
                  QtyUnit.ItemIndex := 1;
                end
                else if FQtyUnit = 'Kg' then
                begin
                  QtyUnit.ItemIndex := 2;
                end;
              end;
            end;
            CDS_1.Delete;
          end;
        end;
      end;
    finally
      frmDeliTradePlanSel.Free;
    end;
  end;

end;

procedure TfrmTradeDeliveryRequestInPut.ToolButton2Click(Sender: TObject);
begin
  if Order_Sub.IsEmpty then
    Exit;
  if Trim(Order_Sub.fieldbyname('DRSID').AsString) <> '' then
  begin
    with ADOTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from Trade_Cloth_DR_Sub where DRSID=''' + Trim(Order_Sub.fieldbyname('DRSID').AsString) + '''');
      sql.add(' and isnull(DlyPiece,0)>0');
      Open;
    end;
    if ADOTemp.IsEmpty = False then
    begin
      Application.MessageBox('已发货不能删除数据!', '提示', 0);
      exit;
    end;
    if Application.MessageBox('确定要删除数据吗？', '提示', 32 + 4) <> IDYES then
      Exit;
    with ADOCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete Trade_Cloth_DR_Sub where DRSID=''' + Trim(Order_Sub.fieldbyname('DRSID').AsString) + '''');
      ExecSQL;
    end;
//    with ADOCmd do
//    begin
//      Close;
//      sql.Clear;
//      sql.Add('Update Trade_Cloth_DR_Main Set ');
//      sql.Add('SQPSHZ=(select Sum(SQPS) from Trade_Cloth_DR_Sub A where A.DRMID=Trade_Cloth_DR_Main.DRMID)');
//      sql.Add('where DRMID=''' + Trim(FDRMID) + '''');
//      ExecSQL;
//    end;
  end;
  Order_Sub.Delete;
end;

procedure TfrmTradeDeliveryRequestInPut.ToolButton3Click(Sender: TObject);
var
  FConMainId, FMPRTCode: string;
begin
  try
    frmTradeSalesContractSel := TfrmTradeSalesContractSel.Create(Application);
    with frmTradeSalesContractSel do
    begin
      BuyName.Text := Self.ToCoName.Text;
      if ShowModal = 1 then
      begin
        while CDS_1.locate('SSel', true, []) do
        begin
          if not self.Order_Sub.locate('ConSId', trim(frmTradeSalesContractSel.CDS_1.Fieldbyname('ConSId').AsString), []) then
          begin
            with Self.Order_Sub do
            begin
              Append;
              FieldByName('ConNo').Value := Trim(frmTradeSalesContractSel.CDS_1.fieldbyname('ConNo').AsString);
              FieldByName('ConMId').Value := Trim(frmTradeSalesContractSel.CDS_1.fieldbyname('ConMId').AsString);
              FieldByName('ConSId').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('ConSId').Value;
              FieldByName('C_Code').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Code').Value;
              FieldByName('C_Name').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Name').Value;
              FieldByName('C_Composition').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Composition').Value;
              FieldByName('C_Spec').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Spec').Value;
              FieldByName('C_Width').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Width').Value;
              FieldByName('C_GramWeight').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_GramWeight').Value;
              FieldByName('C_Color').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Color').Value;
              FieldByName('C_ColorNo').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_ColorNo').Value;
              FieldByName('C_EColor').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_EColor').Value;
              FieldByName('C_Pattern').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_Pattern').Value;
              FieldByName('C_StyleNo').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('C_StyleNo').Value;
              FieldByName('Price').Value := frmTradeSalesContractSel.CDS_1.fieldbyname('ConPrice').Value;
            end;
          end;

          CDS_1.Edit;
          CDS_1.fieldbyname('SSel').value := false;
        end;

      end;
    end;
  finally
    frmTradeSalesContractSel.Free;
  end;
end;

procedure TfrmTradeDeliveryRequestInPut.ToolButton4Click(Sender: TObject);
begin
  WriteCxGrid(trim(self.Caption), Tv1, '发货管理')
end;

procedure TfrmTradeDeliveryRequestInPut.ToCoNameBtnUpClick(Sender: TObject);
begin

  try
    frmCompanySel := TfrmCompanySel.Create(Application);
    with frmCompanySel do
    begin
      if OutType.Text = '转单出库' then
      begin
        FCoType := '客户';
      end
      else if OutType.Text = '加工出库' then
      begin
        FCoType := '供应商';
      end;
      if ShowModal = 1 then
      begin
        self.ToCoName.TxtCode := Trim(frmCompanySel.CDS_1.fieldbyname('CoCode').AsString);
        self.ToCoName.Text := Trim(frmCompanySel.CDS_1.fieldbyname('CoAbbrName').AsString);
      end;
    end;

  finally
    frmCompanySel.Free;
  end;

end;

procedure TfrmTradeDeliveryRequestInPut.ToCoNameBtnDnClick(Sender: TObject);
begin
  ToCoName.Text := '';
end;

end.

