⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wage.cpp

📁 速达开源ERP系统
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Wage.h"
#include "wageDuplic.h"
#include "WageCopy.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "fpanel"
#pragma link "RecBaseForm"
#pragma link "SDGrid"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmWage *frmWage;

//---------------------------------------------------------------------------
__fastcall TfrmWage::TfrmWage(TComponent* Owner)
        : TRecBaseForm(Owner,euSdWage,"")
{
}
//---------------------------------------------------------------------------



void __fastcall TfrmWage::GetDataFromComObject()
{
    scWageEmployee->LocateKey(GetFieldValue(fiWageEmployee));
//    scWageEmployee->Text=scWageEmployee->ItemData[cbItem1];
    seWageFix->Text     =   GetFieldValue(fiWageFix);
    seWageAnce->Text  =   GetFieldValue(fiWageAnce);
    seWageOther->Text      =   GetFieldValue(fiWageOther);
    seWageBorus->Text      =   GetFieldValue(fiWageBorus);
    seWagePiece->Text      =   GetFieldValue(fiWagePiece);
    seWageLab->Text    =   GetFieldValue(fiWageLab);
    seWageTax->Text  =   GetFieldValue(fiWageTax);
    lbWageSum->Caption =GetFieldValue(fiWageSum);
    SpCopy->Enabled=false;
    tbDuplic->Enabled=true;
    sgWage->LocateGrid(1,GetFieldValue(fiWageEmployee));

}
//---------------------------------------------------------------------------

AnsiString __fastcall TfrmWage::GetFieldValue(int FieldIndex)
{
    WideString S;
    S   =   ReadFieldValue(comServer,FieldIndex);
    return(S);
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::ClearControl(bool BringToNext)

{
    // BringToNext为真时,不清空
    if(BringToNext)
        return;
    scWageEmployee->ItemIndex=-1;
    seWageFix->Text        =   "0";
    seWageAnce->Text     =   "0";
    seWageOther->Text         =   "0";
    seWageBorus->Text         =   "0";
    seWagePiece->Text         =   "0";
    seWageLab->Text       =   "0";
    seWageTax->Text  =   "0";
    lbWageSum->Caption="0";
}

//---------------------------------------------------------------------------

void __fastcall TfrmWage::SendDataToComObject()
{
    EditIsEmptyToZero(FloatPanel1);
    WriteFieldValue(comServer,fiWageFmonth,WideString(cbWageFmonth->Text));
    WriteFieldValue(comServer,fiWageEmployee,WideString(scWageEmployee->ItemData[cbItem2]));
    WriteFieldValue(comServer,fiWageFix,WideString(seWageFix->Text));
    WriteFieldValue(comServer,fiWageAnce,WideString(seWageAnce->Text));
    WriteFieldValue(comServer,fiWageOther,WideString(seWageOther->Text));
    WriteFieldValue(comServer,fiWageBorus,WideString(seWageBorus->Text));
    WriteFieldValue(comServer,fiWagePiece,WideString(seWagePiece->Text));
    WriteFieldValue(comServer,fiWageLab,WideString(seWageLab->Text));
    WriteFieldValue(comServer,fiWageTax,WideString(seWageTax->Text));



}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::WaitUserInput()
{
   if(CurrentState==caAddDetail)
     scWageEmployee->SetFocus();
     else
     seWageFix->SetFocus();
     SpCopy->Enabled=true;
     tbDuplic->Enabled=false;
}
//---------------------------------------------------------------------------

AnsiString __fastcall TfrmWage::GetDataToGrid()
{
    AnsiString  s;

    s   =   "\t" + GetFieldValue(fiWageEmployee)+"\t" + GetFieldValue(fiWageSum)+
            "\t" + GetFieldValue(fiWageFix)+"\t" + GetFieldValue(fiWageBorus)+
            "\t" + GetFieldValue(fiWageAnce)+"\t" + GetFieldValue(fiWageOther)+
            "\t" + GetFieldValue(fiWagePiece)+"\t" + GetFieldValue(fiWageLab)+
            "\t" + GetFieldValue(fiWageTax);

    return(s);
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::RefreshGridData(int mAction)
{
    AnsiString ItemStr;

    ItemStr =   GetDataToGrid();
    // 新增
    if (mAction ==  0)
    {
        sgWage->AddItem(ItemStr);
        sgWage->Row=sgWage->RowCount-1;        
    }
    // 修改
    else if(mAction ==  1)
    {
       sgWage->ChangeItem(ItemStr,sgWage->Row);
    }
    // 删除
    else if(mAction ==  2)
    {
        sgWage->RemoveItem(sgWage->Row);
    }
}

//---------------------------------------------------------------------------

void __fastcall TfrmWage::FillGridWithData()
{
    AnsiString ItemStr;

    comServer->MoveFirst();
    sgWage->RowCount =  1;
    while (comServer->Eof == 0)
    {
        ItemStr =  GetDataToGrid();
        sgWage->AddItem(ItemStr);
        comServer->MoveNext();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::InitEditControl()
{
    ClientGroup->AddComponent(2,true,true,false, sgWage,sgWage->Name);
    ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
    ClientGroup->AddComponent(2,true,true,false, FloatPanel2,FloatPanel2->Name);
    ClientGroup->AddComponent(2,false,true,false,scWageEmployee,scWageEmployee->Name);
   FillComboBox(cbWageFmonth,"select FcMonth from sdfc ","FcMonth");
   FillComboBox(scWageEmployee,"Select Employee=EmployeeCode+'|'+EmployeeName,EmployeeCode from sdEmployee","Employee","EmployeeCode");

}

//---------------------------------------------------------------------------


void __fastcall TfrmWage::cbWageFmonthClick(TObject *Sender)
{
 if(cbWageFmonth->Text!=FmonthValue)
    {
   if(cbWageFmonth->LocateKey(cbWageFmonth->Text))
      {
        WideString s;
        s   =   "WageFmonth= '" + cbWageFmonth->Text + "'";
        comServer->FilterString =   s;
        comServer->Query();

        FillGridWithData();
        comServer->MoveFirst();
        GetDataFromComObject();
        FmonthValue=cbWageFmonth->Text;
      }
     else
       cbWageFmonth->Text=FmonthValue;
    }
    if(cbWageFmonth->Text<g_sdHMonth)
       SetToolbarEnabled(false);
    else
       SetToolbarEnabled(true);

}
//---------------------------------------------------------------------------


void __fastcall TfrmWage::SetFmonthValue(AnsiString value)
{
        if(FFmonthValue != value) {
                FFmonthValue = value;
        }
}
AnsiString __fastcall TfrmWage::GetFmonthValue()
{
        return FFmonthValue;
}
void __fastcall TfrmWage::FormShow(TObject *Sender)
{
   ClearControl(false);
   cbWageFmonth->LocateKey(g_sdHMonth); 
   cbWageFmonthClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::tbDuplicClick(TObject *Sender)
{
 try{
       TfrmWageDuplic *frmWageDuplic= new TfrmWageDuplic(this);
       frmWageDuplic->ShowModal();
       if(frmWageDuplic->ModalResult==mrOk)
       {
        frmWageDuplic->comServer->FilterString=WideString("WageFmonth='"+frmWageDuplic->scFmonth->Text+"'");
        frmWageDuplic->comServer->Query();
        if(frmWageDuplic->comServer->RecordCount>0)
          {
            comServer->MoveFirst(); //删除当月工资记录
            while(!comServer->Eof)
            {
             comServer->Delete();
            }
            sgWage->RowCount=1;
            for(int i=0;i<frmWageDuplic->comServer->RecordCount;i++)
             {
              frmWageDuplic->comServer->LocateByIndex(i);
              comServer->AddNew();
              WriteFieldValue(comServer,fiWageFmonth,WideString(cbWageFmonth->Text));
              WriteFieldValue(comServer,fiWageEmployee,WideString(frmWageDuplic->GetFieldValue(fiWageEmployee)));
              WriteFieldValue(comServer,fiWageFix,WideString(frmWageDuplic->GetFieldValue(fiWageFix)));
              WriteFieldValue(comServer,fiWageAnce,WideString(frmWageDuplic->GetFieldValue(fiWageAnce)));
              WriteFieldValue(comServer,fiWageOther,WideString(frmWageDuplic->GetFieldValue(fiWageOther)));
              WriteFieldValue(comServer,fiWageBorus,WideString(frmWageDuplic->GetFieldValue(fiWageBorus)));
              WriteFieldValue(comServer,fiWagePiece,WideString(frmWageDuplic->GetFieldValue(fiWagePiece)));
              WriteFieldValue(comServer,fiWageLab,WideString(frmWageDuplic->GetFieldValue(fiWageLab)));
              WriteFieldValue(comServer,fiWageTax,WideString(frmWageDuplic->GetFieldValue(fiWageTax)));
              comServer->Post();
              RefreshGridData(0);
             }
          }
        else
          ShowMessage("没有可复制的记录!");
       }
     }
    __finally
    {
     delete frmWageDuplic;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::SpCopyClick(TObject *Sender)
{
  try{
       TfrmWageCopy *frmWageCopy= new TfrmWageCopy(this);
       frmWageCopy->ShowModal();
       if(frmWageCopy->ModalResult==mrOk)
       {
        frmWageCopy->comServer->LocateByKey(WideString(frmWageCopy->scFmonth ->Text+frmWageCopy->sgWage->TextMatrix[frmWageCopy->sgWage->Row][1]));
        if(!frmWageCopy->comServer->Eof)
        {
          seWageFix->Text=frmWageCopy->GetFieldValue(fiWageFix);
          seWageAnce->Text=frmWageCopy->GetFieldValue(fiWageAnce);
          seWageOther->Text=frmWageCopy->GetFieldValue(fiWageOther);
          seWageBorus->Text=frmWageCopy->GetFieldValue(fiWageBorus);
          seWagePiece->Text=frmWageCopy->GetFieldValue(fiWagePiece);
          seWageLab->Text=frmWageCopy->GetFieldValue(fiWageLab);
          seWageTax->Text=frmWageCopy->GetFieldValue(fiWageTax);
          lbWageSum->Caption=frmWageCopy->GetFieldValue(fiWageSum);
        }
       }
      }
    __finally
    {
    delete frmWageCopy;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::seWageTaxEnter(TObject *Sender)
{
   if(CurrentState!=0)
   {
    double TaxAmt[8][3],Amt;
    int i;
    Currency Tax=0;
    EditIsEmptyToZero(FloatPanel1);
    Amt=seWageFix->Text.ToDouble()+seWageBorus->Text.ToDouble()+seWageAnce->Text.ToDouble()+
        seWageOther->Text.ToDouble()+seWagePiece->Text.ToDouble()+seWageLab->Text.ToDouble();
    lbWageSum->Caption=AnsiString(Amt);
    Amt=Amt-1260;     //减去基数1260
    if(Amt>0)
     {
      TaxAmt[0][0]=500;TaxAmt[0][1]=0.05;TaxAmt[0][2]=0;
      TaxAmt[1][0]=2000;TaxAmt[1][1]=0.1;TaxAmt[1][2]=25;
      TaxAmt[2][0]=5000;TaxAmt[2][1]=0.15;TaxAmt[2][2]=125;
      TaxAmt[3][0]=20000;TaxAmt[3][1]=0.2;TaxAmt[3][2]=375;
      TaxAmt[4][0]=40000;TaxAmt[4][1]=0.25;TaxAmt[4][2]=1375;
      TaxAmt[5][0]=60000;TaxAmt[5][1]=0.3;TaxAmt[5][2]=3375;
      TaxAmt[6][0]=80000;TaxAmt[6][1]=0.35;TaxAmt[6][2]=6375;
      TaxAmt[7][0]=100000;TaxAmt[7][1]=0.40;TaxAmt[7][2]=10375;
//    TaxAmt[8][0]=100000.01;TaxAmt[8][1]=0.45;TaxAmt[8][2]=15375;
      if(Amt<=500||Amt>100000)
        {
         if(Amt>100000)
          Tax=Amt*0.45-15375;
         else
           Tax=Amt*0.05;
        }
     else
       {
       for(i=7;i>0;i--)
        {
         if((TaxAmt[i][0]>Amt)&&(Amt>=TaxAmt[i-1][0]))
          {
           Tax=Amt*TaxAmt[i][1]-TaxAmt[i][2];
           break;
          }
        }
       }
     }
    seWageTax->Text=AnsiString(Tax);
   }
}
//---------------------------------------------------------------------------

void __fastcall TfrmWage::sgWageClick(TObject *Sender)
{
    if (sgWage->Row    >   0)
         comServer->LocateByKey(WideString(cbWageFmonth->Text+sgWage->TextMatrix[sgWage->Row][1]));
    if (!comServer->Eof)
         GetDataFromComObject();

}
//---------------------------------------------------------------------------
void __fastcall TfrmWage::EditIsEmptyToZero(TWinControl* ControlName)
{
   for(int i=0;i<ControlName->ControlCount;i++)
      {
      if(UpperCase((AnsiString)(ControlName->Controls[i])->ClassName())=="TSDEDIT")
         {
          if((dynamic_cast<TSDEdit *>(ControlName->Controls[i])->Text.IsEmpty())&&(dynamic_cast<TSDEdit *>(ControlName->Controls[i])->DataType==dtNumber))
             dynamic_cast<TSDEdit *>(ControlName->Controls[i])->Text="0";
         }
     }
}
void  __fastcall TfrmWage::RefreshUpdateData(int MsgSrc,int MsgType)
{
switch(MsgSrc)
    {
   case euSdFc:
     if(ShowUpdateMessage(MsgSrc,MsgType))
       {
       KeyCode=cbWageFmonth->ItemData[cbItem2];
       FillComboBox(cbWageFmonth,"select FcMonth from sdfc ","FcMonth");
       cbWageFmonth->LocateKey(KeyCode);
       }
       break;
   case euSdEmployee:
     if(ShowUpdateMessage(MsgSrc,MsgType))
     {
       KeyCode=scWageEmployee->ItemData[cbItem2];
       FillComboBox(scWageEmployee,"Select Employee=EmployeeCode+'|'+EmployeeName,EmployeeCode from sdEmployee","Employee","EmployeeCode");
       scWageEmployee->LocateKey(KeyCode);
      }
       break;
    }
}
void __fastcall TfrmWage::scWageEmployeeClick(TObject *Sender)
{
  if(CurrentState==caNormal)
    {
      comServer->LocateByKey(WideString(cbWageFmonth->Text+scWageEmployee->ItemData[cbItem2]));
      GetDataFromComObject();
    }

}
//---------------------------------------------------------------------------
bool __fastcall TfrmWage::ShowQueryWindow()
{
  TfrmQuForm *FQuery=new TfrmQuForm(this,this->Name);
  FQuery->ShowModal();
  if(FQuery->CancelQuery)
    return false;
  if(FQuery->CreateSqlString.IsEmpty())
     comServer->FilterString=WideString("WageFmonth='"+FmonthValue+"'");
     else
     comServer->FilterString=WideString(FQuery->CreateSqlString+" and WageFmonth='"+FmonthValue+"'");
  delete FQuery;
  return true;
}


void __fastcall TfrmWage::SetToolbarEnabled(bool bEnabled)
{
   tbAddHead->Enabled=bEnabled;
   tbEditHead->Enabled=bEnabled;
   tbDeleteHead->Enabled=bEnabled;
   tbDuplic->Enabled=bEnabled;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -