📄 saleview.cpp
字号:
// SaleView.cpp : implementation file
//
#include "stdafx.h"
#include "PhysicM.h"
#include "SaleView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSaleView
IMPLEMENT_DYNCREATE(CSaleView, CFormView)
CSaleView::CSaleView()
: CFormView(CSaleView::IDD)
{
//{{AFX_DATA_INIT(CSaleView)
m_price = 0.0;
m_rate = 0.0;
m_number = 0.0;
m_edt = _T("");
m_dt_rate = 0.0;
//}}AFX_DATA_INIT
//ImageList=NULL;
init=false;
}
CSaleView::~CSaleView()
{
// if (ImageList) delete ImageList;
}
void CSaleView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSaleView)
DDX_Control(pDX, IDC_SALESMAN_COMB, m_SaleManComb);
DDX_Control(pDX, IDC_HOSPITAL_COMB, m_HospitalComb);
DDX_Control(pDX, IDC_PhysicName_COMB, m_PhysicComb);
DDX_Control(pDX, IDC_PROVIDER_COMB, m_ProviderComb);
DDX_Text(pDX, IDC_PRICE_EDIT, m_price);
DDX_Text(pDX, IDC_RATE_EDIT, m_rate);
DDX_Control(pDX, IDC_MSFLEXGRID1, m_Grid);
DDX_Text(pDX, IDC_EDT, m_edt);
DDX_Text(pDX, IDC_DEDIT, m_dt_rate);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSaleView, CFormView)
//{{AFX_MSG_MAP(CSaleView)
ON_CBN_SELCHANGE(IDC_PhysicName_COMB, OnSelchange)
ON_CBN_SELCHANGE(IDC_PROVIDER_COMB, OnSelchangeProviderComb)
ON_BN_CLICKED(IDC_ADD_BTN, OnAddBtn)
ON_CBN_SELCHANGE(IDC_HOSPITAL_COMB, OnSelchangeHospitalComb)
ON_EN_CHANGE(IDC_EDT, OnChangeEdt)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSaleView diagnostics
#ifdef _DEBUG
void CSaleView::AssertValid() const
{
CFormView::AssertValid();
}
void CSaleView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSaleView message handlers
void CSaleView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
if (init) return;
/*
m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
char *head[]={"序 号","药品名称","单价","数量","金额","费率(%)","费用","医生","医生费率%","医生费用","供应商名称","医院","销售员","ID","备注"};
int i;
for (i=0;i<7;i++)
m_List.InsertColumn(i,head[i],(i>1)?LVCFMT_RIGHT:LVCFMT_LEFT,(i==1) ? 100 : 55,i);
for (i=7;i<9;i++)
m_List.InsertColumn(i,head[i],(i>7)?LVCFMT_RIGHT:LVCFMT_LEFT,70,i);
for (i=9;i<15;i++)
m_List.InsertColumn(i,head[i],LVCFMT_LEFT,(i>9 && i<12) ? 150 :70);
ImageList=new CImageList();
ImageList->Create(16,16,TRUE | ILC_COLOR32,2,0);
ImageList->Add(AfxGetApp()->LoadIcon(IDI_ICONUSER));
ImageList->Add(AfxGetApp()->LoadIcon(IDR_MENUVIEW_TMPL));
m_List.SetImageList(ImageList,LVSIL_SMALL);// LVSIL_NORMAL);
*/
Init();
DefineGrid();
}
void CSaleView::Init()
{
init=true;
try{
DBLibrary DB(GetDB());
DB.Open("select a.physic_id phid,"
"b.physic_name phn "
" from physic_rate a,physic b"
" where a.physic_id=b.physic_id "
" order by a.physic_id");
int id=0;
char pn[40],tmp[50];
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("phid");
DB.GetValue("phn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_PhysicComb.AddString(tmp);
DB.Next();
}
/*
DB.Open("select hospital_id hid,rtrim(hospital_name) hn from hospital order by hospital_id");
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("hid");
DB.GetValue("hn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_HospitalComb.AddString(tmp);
DB.Next();
}
*/
DB.Open("select salesman_id sid,salesman_name sn from salesman order by salesman_id");
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("sid");
DB.GetValue("sn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_SaleManComb.AddString(tmp);
DB.Next();
}
/*
DB.Open("select doctor_id did,doctor_name dn from doctor order by doctor_id");
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("did");
DB.GetValue("dn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_DoctorComb.AddString(tmp);
DB.Next();
}
*/
}catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
ShowErr(str,code);
}
catch (...)
{
ShowErr("unknow error",-1);
//((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
}
}
void CSaleView::OnSelchange()
{
m_Grid.SetRows(2);
for(int i=0;i<m_Grid.GetCols() - 1;i++)
m_Grid.SetTextMatrix(1,i,"");
GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
m_price=0;m_dt_rate=0;m_rate=0;
UpdateData(FALSE);
m_HospitalComb.ResetContent();
m_ProviderComb.ResetContent();
CString pn;
m_PhysicComb.GetWindowText(pn);
if(pn.IsEmpty()) return;
CString pid=pn.Mid(1,3);
DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
try{
DB.Open("select a.provider_id prid,"
"b.provider_name pn "
" from physic_rate a,provider b"
" where a.physic_id=%s and a.provider_id=b.provider_id "
" order by a.provider_id",pid);
int id=0;
char pn[40],tmp[50];
memset(tmp,0,50);
memset(pn,0,40);
while(!DB.isEof())
{
id=DB.GetValue("prid");
DB.GetValue("pn",pn);
sprintf(tmp,"[%03d]%s",id,pn);
m_ProviderComb.AddString(tmp);
DB.Next();
}
}catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
}
catch (...)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
}
}
void CSaleView::OnSelchangeProviderComb()
{
m_Grid.SetRows(2);
for(int i=0;i<m_Grid.GetCols() - 1;i++)
m_Grid.SetTextMatrix(1,i,"");
GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
CString pn,pr;
m_PhysicComb.GetWindowText(pn);
m_ProviderComb.GetWindowText(pr);
if(pn.IsEmpty()) return;
if(pr.IsEmpty()) return;
CString pid,prid;
pid=pn.Mid(1,3);
prid=pr.Mid(1,3);
DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
try{
DB.Open("select a.physic_id phid,"
"b.physic_name phn,"
" b.price,a.rate,a.doctor_rate"
" from physic_rate a,physic b "
" where a.physic_id=%s and a.provider_id=%s "
" and a.physic_id=b.physic_id "
" order by a.physic_id",pid,prid);
/* double price,rate,d_rate;
pric=0.00;
rate=0.00;
d_rate=0.00;
*/
DB.GetValue("price",&m_price);
DB.GetValue("rate",&m_rate);
DB.GetValue("doctor_rate",&m_dt_rate);
//m_price=price
UpdateData(FALSE);
GetHospital();
}catch (DBErr &err)
{
char *str;
int code;
err.GetLastErr(code,&str);
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code);
}
catch (...)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1);
}
}
void CSaleView::OnAddBtn()
{
DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
UpdateData();
GetDlgItem(IDC_ADD_BTN)->EnableWindow(FALSE);
CString pt,ht,st,prt,dt;
CString pid,hid,sid,prid,did;
CString num,price,sub_fee,real_fee,date,dt_rate;
//double num=0.00,
m_PhysicComb.GetWindowText(pt);
m_HospitalComb.GetWindowText(ht);
m_SaleManComb.GetWindowText(st);
m_ProviderComb.GetWindowText(prt);
pt.TrimLeft();
pt.TrimRight();
ht.TrimLeft();
ht.TrimRight();
st.TrimLeft();
st.TrimRight();
prt.TrimLeft();
prt.TrimRight();
try
{
if(m_dt_rate<=0)
{
int rt=MessageBox("临床费为零或小于零,是否继续?","提示信息",MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
if (rt != IDYES) throw "临床费为零或小于零,取消操作";
}
if(pt.IsEmpty())
throw "药品名称不能为空,请选择";
if(ht.IsEmpty())
throw "医院名称不能为空,请选择";
if(st.IsEmpty())
throw "销售人员名称不能为空,请选择";
if(prt.IsEmpty())
throw "供应商名称不能为空,请选择";
}catch(char *estr)
{
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr);
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
GetDlgItem(IDC_DEDIT)->SetFocus();
DB.RollbackTrans();
return;
}
pid=pt.Mid(1,3);
hid=ht.Mid(1,3);
sid=st.Mid(1,3);
prid=prt.Mid(1,3);
//did=dt.Mid(1,3);
// DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession);
/*
if (!CheckGrid(&m_Grid)) {
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
return;
}
*/
double max_id=0;
char errstr[100];
try{
DB.Open("SELECT IDENT_CURRENT('SALE_NUMBER') did "
" FROM INFORMATION_SCHEMA.TABLES "
" WHERE TABLE_NAME ='SALE_NUMBER' ");
DB.GetValue("did",&max_id);
max_id += 1;
int id=(int)max_id;
int rt=0,ct=0,rows,count=0;
rows=m_Grid.GetRows();
rows -= 1;
DB.BeginTrans();
for (rt=1;rt<rows;rt++)
{
dt=m_Grid.GetTextMatrix(rt,1);
did=dt.Mid(1,3);
did.TrimLeft();
did.TrimRight();
num=m_Grid.GetTextMatrix(rt,2);
dt_rate=m_Grid.GetTextMatrix(rt,3);
price=m_Grid.GetTextMatrix(rt,4);
sub_fee=m_Grid.GetTextMatrix(rt,5);
real_fee=m_Grid.GetTextMatrix(rt,6);
date=m_Grid.GetTextMatrix(rt,7);
num.TrimLeft();
num.TrimRight();
if (atof(num) <= 0.00) continue;
price.TrimLeft();
price.TrimRight();
if (price.IsEmpty()) price="0";
sub_fee.TrimLeft();
sub_fee.TrimRight();
if (sub_fee.IsEmpty()) sub_fee="0";
date.TrimLeft();
date.TrimRight();
if (date.IsEmpty())
{
sprintf(errstr,"销售日期不能为空(第%d行),请输入",rt);
throw errstr;
}
if(date.GetLength() != 10)
{
sprintf(errstr,"销售日期有误(第%d行),请检查",rt);
throw errstr;
}
int year,month,day;
year=atoi(date.Mid(0,4));
month=atoi(date.Mid(5,2));
day=atoi(date.Mid(8,2));
COleDateTime dt;
if (dt.SetDate(year,month,day) != 0)
{
sprintf(errstr,"销售日期%s有误(第%d行),请更正",date,rt);
throw errstr;
}
date=dt.Format("%Y-%m-%d");
if (did.IsEmpty()) {
sprintf(errstr,"第%d行医生编号有误",rt);
throw errstr;
}
DB.ExecSQL("INSERT INTO sale_number "
"(Physic_ID,Hospital_ID,Salesman_ID,Provider_ID,doctor_id,Physic_Num,price,Rate,doctor_rate,sum_fee,Sub_Fee,real_fee,Sale_Date,Op_Date) "
" VALUES(%s,%s,%s,%s,%s,%s,%.2f,%.2f,%s,%s,%s,%s,'%s',GetDate())",//
pid,hid,sid,prid,did,num,m_price,m_rate,dt_rate,price,sub_fee,real_fee,date);//
count++;
}
if (count == 0) throw "没有内容需要增加";
DB.CommitTrans();
((CPhysicMApp *)AfxGetApp())->pMainFrm->AddLog("新增销售记录%d条成功",count);
GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE);
GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -