diff --git a/RepairCafeCureApp/CAssetTab.cpp b/RepairCafeCureApp/CAssetTab.cpp index 5a8bf0a..7ed949c 100644 --- a/RepairCafeCureApp/CAssetTab.cpp +++ b/RepairCafeCureApp/CAssetTab.cpp @@ -418,7 +418,7 @@ BOOL CAssetTab::LoadAssetDetailsList() noexcept if (sql.CreateSQLConnection()) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -443,25 +443,25 @@ BOOL CAssetTab::LoadAssetDetailsList() noexcept return static_cast(szName); }; - SQLGetData(hstmt, ASSET.ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_ctrExistingAssetList.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); - SQLGetData(hstmt, ASSET.ASSET_DISPOSED, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_DISPOSED, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrExistingAssetList.SetItemText(nIndex, 6, CheckForNull(szName, cbName)); SQLGetData(hstmt, ASSET.ASSET_HISTORY_LOG, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); diff --git a/RepairCafeCureApp/CAssetView.cpp b/RepairCafeCureApp/CAssetView.cpp index 242d12d..de6549f 100644 --- a/RepairCafeCureApp/CAssetView.cpp +++ b/RepairCafeCureApp/CAssetView.cpp @@ -229,7 +229,7 @@ void CAssetView::OnClickedHistorySearch() if (sql.CreateSQLConnection()) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -253,25 +253,25 @@ void CAssetView::OnClickedHistorySearch() return static_cast(szName); }; - SQLGetData(hstmt, HISTORY_SEARCH.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lstHistorySearchResults.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.ASSET_DISPOSED, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.ASSET_DISPOSED, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); - SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstHistorySearchResults.SetItemText(nIndex, 6, CheckForNull(szName, cbName)); SQLGetData(hstmt, HISTORY_SEARCH.WORKORDER_DESCRIPTION, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); diff --git a/RepairCafeCureApp/CClosedWorkOrderDetailsTab.cpp b/RepairCafeCureApp/CClosedWorkOrderDetailsTab.cpp index 0d8b0a0..0e186db 100644 --- a/RepairCafeCureApp/CClosedWorkOrderDetailsTab.cpp +++ b/RepairCafeCureApp/CClosedWorkOrderDetailsTab.cpp @@ -28,7 +28,7 @@ /* * This file is part of RepairCafeCureApp. -* File: CClosedWorkOrderDetailsTab.h, implements class CClosedWorkOrderDetailsTab +* File: CClosedWorkOrderDetailsTab.cpp, implements class CClosedWorkOrderDetailsTab * * This class is the view of the Workorder-tab in the CClosedWorkorderDetailsTabCtrl class, * which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) @@ -58,9 +58,8 @@ using namespace artvabas::database::tables::workorder; IMPLEMENT_DYNAMIC(CClosedWorkOrderDetailsTab, CDialogEx) -CClosedWorkOrderDetailsTab::CClosedWorkOrderDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent) +CClosedWorkOrderDetailsTab::CClosedWorkOrderDetailsTab(unsigned int unID, CWnd* pParent) : CDialogEx(IDD_CLOSED_WORKORDER_DETAILS_TAB, pParent) - , m_pTabControl{ pTabControl } , m_unWorkorderID{ unID } , m_strWorkorderID{ _T("") } , m_strWorkorderAssetID{ _T("") } @@ -81,7 +80,7 @@ CClosedWorkOrderDetailsTab::~CClosedWorkOrderDetailsTab() BEGIN_MESSAGE_MAP(CClosedWorkOrderDetailsTab, CDialogEx) END_MESSAGE_MAP() -// OnintDialog is called when the dialog is created, it is used to load the data from the database +// OnIntDialog is called when the dialog is created, it is used to load the data from the database // and display it in the dialog. BOOL CClosedWorkOrderDetailsTab::OnInitDialog() { @@ -97,7 +96,7 @@ BOOL CClosedWorkOrderDetailsTab::OnInitDialog() if (sql.CreateSQLConnection()) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -120,35 +119,34 @@ BOOL CClosedWorkOrderDetailsTab::OnInitDialog() } return static_cast(szName); }; - // Get data for columns 1, employee names - SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderID = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderAssetID = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderCustomerID = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderInvoiceID = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderCreateDate = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderCreatedBy = CheckForNull(szName, cbName); SQLGetData(hstmt, WORKORDER.WORKORDER_DESCRIPTION, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); m_strWorkorderDescription = CheckForNull(szNameLong, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderEmployeeResponsible = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderStatus = CheckForNull(szName, cbName); - SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strWorkorderClosedDate = CheckForNull(szName, cbName); SQLGetData(hstmt, WORKORDER.WORKORDER_HISTORY, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); diff --git a/RepairCafeCureApp/CClosedWorkOrderDetailsTab.h b/RepairCafeCureApp/CClosedWorkOrderDetailsTab.h index 50da0b2..9f626fc 100644 --- a/RepairCafeCureApp/CClosedWorkOrderDetailsTab.h +++ b/RepairCafeCureApp/CClosedWorkOrderDetailsTab.h @@ -46,12 +46,8 @@ * License: GPLv3 */ #pragma once -#include "CClosedWorkorderDetailsTabCtrl.h" - namespace artvabas::rcc::ui::dialogs { - using namespace artvabas::rcc::ui::controls; - class CClosedWorkOrderDetailsTab : public CDialogEx { #ifdef AFX_DESIGN_TIME @@ -60,7 +56,6 @@ namespace artvabas::rcc::ui::dialogs { DECLARE_DYNAMIC(CClosedWorkOrderDetailsTab) private: - CClosedWorkorderDetailsTabCtrl* m_pTabControl; unsigned int m_unWorkorderID; CString m_strWorkorderID; @@ -76,14 +71,13 @@ namespace artvabas::rcc::ui::dialogs { CString m_strWorkorderHistoryLog; public: - CClosedWorkOrderDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent = nullptr); // standard constructor + CClosedWorkOrderDetailsTab(unsigned int unID, CWnd* pParent = nullptr); virtual ~CClosedWorkOrderDetailsTab(); - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + private: + BOOL OnInitDialog() override; + void DoDataExchange(CDataExchange* pDX) override; DECLARE_MESSAGE_MAP() - public: - virtual BOOL OnInitDialog(); }; } \ No newline at end of file diff --git a/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.cpp b/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.cpp index db18de1..39cc90f 100644 --- a/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.cpp +++ b/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.cpp @@ -1,37 +1,173 @@ -// CClosedWorkorderAssetDetailsTab.cpp : implementation file -// +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + + To see the license for this source code, please visit: + + + For more information, please visit: + + + + For contacts, please use the contact form at: + + +*/ + +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderAssetDetailsTab.cpp, implements class CClosedWorkorderAssetDetailsTab +* +* This class is the view of the Asset-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the Asset-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ #include "pch.h" #include "RepairCafeCureApp.h" -#include "afxdialogex.h" #include "CClosedWorkorderAssetDetailsTab.h" +#include "CSqlNativeAVB.h" +#include "DatabaseTables.h" - -// CClosedWorkorderAssetDetailsTab dialog +using namespace artvabas::sql; +using namespace artvabas::database::tables::asset; +using namespace artvabas::rcc::ui::dialogs; IMPLEMENT_DYNAMIC(CClosedWorkorderAssetDetailsTab, CDialogEx) -CClosedWorkorderAssetDetailsTab::CClosedWorkorderAssetDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent /*=nullptr*/) +CClosedWorkorderAssetDetailsTab::CClosedWorkorderAssetDetailsTab(unsigned int unID, CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_CLOSED_WORKORDER_ASSET_DETAILS_TAB, pParent) - , m_pTabControl{ pTabControl } , m_unAssetID{ unID } + , m_strAssetID(_T("")) + , m_strAssetCustomerID(_T("")) + , m_strAssetCreateDate(_T("")) + , m_bAssetDsiposed(FALSE) + , m_strAssetDescription(_T("")) + , m_strAssetModelNumber(_T("")) + , m_strAsserBrand(_T("")) + , m_strAssetHistoryLog(_T("")) +{} -{ +CClosedWorkorderAssetDetailsTab::~CClosedWorkorderAssetDetailsTab() +{} -} +BEGIN_MESSAGE_MAP(CClosedWorkorderAssetDetailsTab, CDialogEx) +END_MESSAGE_MAP() -CClosedWorkorderAssetDetailsTab::~CClosedWorkorderAssetDetailsTab() +// OnIntiDialog is called when the dialog is created +// It is used to load the data from the database and display it in the dialog +BOOL CClosedWorkorderAssetDetailsTab::OnInitDialog() { -} + CDialogEx::OnInitDialog(); -void CClosedWorkorderAssetDetailsTab::DoDataExchange(CDataExchange* pDX) -{ - CDialogEx::DoDataExchange(pDX); -} + theApp.SetStatusBarText(IDS_STATUSBAR_LOADING); + theApp.BeginWaitCursor(); + CString strBuildQuery; + strBuildQuery.Format(_T("SELECT * FROM ASSET WHERE ASSET_ID = %d"), m_unAssetID); -BEGIN_MESSAGE_MAP(CClosedWorkorderAssetDetailsTab, CDialogEx) -END_MESSAGE_MAP() + CSqlNativeAVB sql{ theApp.GetDatabaseConnection()->ConnectionString() }; + + if (sql.CreateSQLConnection()) { + + SQLCHAR szName[SQLCHARVSMALL]{}; + SQLCHAR szNameLong[SQLCHARVMAX]{}; + SQLLEN cbName{}; + SQLRETURN retcode{}; + SQLHSTMT hstmt{ sql.GetStatementHandle() }; + SQLWCHAR* strQuery{ strBuildQuery.GetBuffer() }; + strBuildQuery.ReleaseBuffer(); + + retcode = SQLExecDirectW(hstmt, strQuery, SQL_NTS); + + if (retcode == SQL_SUCCESS) { + while (TRUE) { + retcode = SQLFetch(hstmt); + if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) + AfxMessageBox(_T("Error fetching data from Asset Table!"), MB_ICONEXCLAMATION); + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { + + auto CheckForNull = [](SQLCHAR* szName, SQLLEN cbName) -> CString { + if (cbName == SQL_NULL_DATA) { + return _T(""); + } + return static_cast(szName); + }; + SQLGetData(hstmt, ASSET.ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAssetID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, ASSET.ASSET_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAssetCustomerID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, ASSET.ASSET_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAssetCreateDate = CheckForNull(szName, cbName); + SQLGetData(hstmt, ASSET.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAssetDescription = CheckForNull(szName, cbName); -// CClosedWorkorderAssetDetailsTab message handlers + SQLGetData(hstmt, ASSET.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAssetModelNumber = CheckForNull(szName, cbName); + + SQLGetData(hstmt, ASSET.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strAsserBrand = CheckForNull(szName, cbName); + + SQLGetData(hstmt, ASSET.ASSET_DISPOSED, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_bAssetDsiposed = _wtoi(CheckForNull(szName, cbName)); + + SQLGetData(hstmt, ASSET.ASSET_HISTORY_LOG, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); + m_strAssetHistoryLog = CheckForNull(szNameLong, cbName); + } + else + break; + } + } + if (!sql.CheckReturnCodeForClosing(retcode)) + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_FAIL); + else + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_OK); + } + sql.CloseConnection(); + theApp.EndWaitCursor(); + UpdateData(FALSE); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +// DoDataExchange is used to exchange and validate data between the dialog and variables +// - pDX: A pointer to a CDataExchange object +void CClosedWorkorderAssetDetailsTab::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_ASSET_ID, m_strAssetID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_CUSTOMER_ID, m_strAssetCustomerID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_CREATE_DATE, m_strAssetCreateDate); + DDX_Check(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_DISPOSED, m_bAssetDsiposed); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_DESCRIPTION, m_strAssetDescription); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_MODEL, m_strAssetModelNumber); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_BRAND, m_strAsserBrand); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_ASSET_TAB_HISTORY_LOG, m_strAssetHistoryLog); +} \ No newline at end of file diff --git a/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.h b/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.h index 943f63e..d901c71 100644 --- a/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.h +++ b/RepairCafeCureApp/CClosedWorkorderAssetDetailsTab.h @@ -1,28 +1,82 @@ -#pragma once -#include "CClosedWorkorderDetailsTabCtrl.h" +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + To see the license for this source code, please visit: + -using namespace artvabas::rcc::ui::controls; + For more information, please visit: + + -class CClosedWorkorderAssetDetailsTab : public CDialogEx -{ - DECLARE_DYNAMIC(CClosedWorkorderAssetDetailsTab) + For contacts, please use the contact form at: + -private: - CClosedWorkorderDetailsTabCtrl* m_pTabControl; - unsigned int m_unAssetID; +*/ -public: - CClosedWorkorderAssetDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent = nullptr); // standard constructor - virtual ~CClosedWorkorderAssetDetailsTab(); +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderAssetDetailsTab.h, defines class CClosedWorkorderAssetDetailsTab +* +* This class is the view of the Asset-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the Asset-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ +#pragma once +#include "CClosedWorkorderDetailsTabCtrl.h" + +namespace artvabas::rcc::ui::dialogs { -// Dialog Data + class CClosedWorkorderAssetDetailsTab : public CDialogEx + { + DECLARE_DYNAMIC(CClosedWorkorderAssetDetailsTab) + // Dialog Data #ifdef AFX_DESIGN_TIME - enum { IDD = IDD_CLOSED_WORKORDER_ASSET_DETAILS_TAB }; + enum { IDD = IDD_CLOSED_WORKORDER_ASSET_DETAILS_TAB }; #endif -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + private: + unsigned int m_unAssetID; + BOOL m_bAssetDsiposed; + + CString m_strAssetID; + CString m_strAssetCustomerID; + CString m_strAssetCreateDate; + CString m_strAssetDescription; + CString m_strAssetModelNumber; + CString m_strAsserBrand; + CString m_strAssetHistoryLog; + + public: + CClosedWorkorderAssetDetailsTab(unsigned int unID, CWnd* pParent = nullptr); + virtual ~CClosedWorkorderAssetDetailsTab(); - DECLARE_MESSAGE_MAP() -}; + private: + void DoDataExchange(CDataExchange* pDX) override; + BOOL OnInitDialog() override; + DECLARE_MESSAGE_MAP() + }; +} diff --git a/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.cpp b/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.cpp index 23a3dbb..2656af4 100644 --- a/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.cpp +++ b/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.cpp @@ -1,36 +1,170 @@ -// CClosedWorkorderCustomerDetailsTab.cpp : implementation file -// +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + + To see the license for this source code, please visit: + + + For more information, please visit: + + + + For contacts, please use the contact form at: + + +*/ + +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderCustomerDetailsTab.cpp, implements class CClosedWorkorderCustomerDetailsTab +* +* This class is the view of the Customer-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the Customer-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ #include "pch.h" #include "RepairCafeCureApp.h" #include "afxdialogex.h" #include "CClosedWorkorderCustomerDetailsTab.h" +#include "CSqlNativeAVB.h" +#include "DatabaseTables.h" - -// CClosedWorkorderCustomerDetailsTab dialog +using namespace artvabas::rcc::ui::dialogs; +using namespace artvabas::sql; +using namespace artvabas::database::tables::customer; IMPLEMENT_DYNAMIC(CClosedWorkorderCustomerDetailsTab, CDialogEx) -CClosedWorkorderCustomerDetailsTab::CClosedWorkorderCustomerDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent /*=nullptr*/) +CClosedWorkorderCustomerDetailsTab::CClosedWorkorderCustomerDetailsTab(unsigned int& unID, CWnd* pParent /*=nullptr*/) : CDialogEx{ IDD_CLOSED_WORKORDER_CUSTOMER_DETAILS_TAB, pParent } - , m_pTabControl{ pTabControl } , m_unCustomerID{ unID } -{ - -} + , m_strCustomerID{ _T("") } + , m_strCustomerName{ _T("") } + , m_strCustomerSurname{ _T("") } + , m_strCustomerCellPhone{ _T("") } + , m_strCustomerPhone{ _T("") } + , m_strCustomerEmail{ _T("") } + , m_strCustomerComment{ _T("") } + , m_strCustomerHistoryLog{ _T("") } +{} CClosedWorkorderCustomerDetailsTab::~CClosedWorkorderCustomerDetailsTab() -{ -} +{} -void CClosedWorkorderCustomerDetailsTab::DoDataExchange(CDataExchange* pDX) +BEGIN_MESSAGE_MAP(CClosedWorkorderCustomerDetailsTab, CDialogEx) +END_MESSAGE_MAP() + +BOOL CClosedWorkorderCustomerDetailsTab::OnInitDialog() { - CDialogEx::DoDataExchange(pDX); -} + CDialogEx::OnInitDialog(); + theApp.SetStatusBarText(IDS_STATUSBAR_LOADING); + theApp.BeginWaitCursor(); -BEGIN_MESSAGE_MAP(CClosedWorkorderCustomerDetailsTab, CDialogEx) -END_MESSAGE_MAP() + CString strBuildQuery; + strBuildQuery.Format(_T("SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = %d"), m_unCustomerID); + + CSqlNativeAVB sql{ theApp.GetDatabaseConnection()->ConnectionString() }; + + if (sql.CreateSQLConnection()) { + + SQLCHAR szName[SQLCHARVSMALL]{}; + SQLCHAR szNameLong[SQLCHARVMAX]{}; + SQLLEN cbName{}; + SQLRETURN retcode{}; + SQLHSTMT hstmt{ sql.GetStatementHandle() }; + SQLWCHAR* strQuery{ strBuildQuery.GetBuffer() }; + strBuildQuery.ReleaseBuffer(); + + retcode = SQLExecDirectW(hstmt, strQuery, SQL_NTS); + + if (retcode == SQL_SUCCESS) { + while (TRUE) { + retcode = SQLFetch(hstmt); + if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) + AfxMessageBox(_T("Error fetching data from Asset Table!"), MB_ICONEXCLAMATION); + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { + + auto CheckForNull = [](SQLCHAR* szName, SQLLEN cbName) -> CString { + if (cbName == SQL_NULL_DATA) { + return _T(""); + } + return static_cast(szName); + }; + SQLGetData(hstmt, CUSTOMER.CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, CUSTOMER.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerSurname = CheckForNull(szName, cbName); + + SQLGetData(hstmt, CUSTOMER.CUSTOMER_NAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerName = CheckForNull(szName, cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerCellPhone = CheckForNull(szName, cbName); -// CClosedWorkorderCustomerDetailsTab message handlers + SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerPhone = CheckForNull(szName, cbName); + + SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strCustomerEmail = CheckForNull(szName, cbName); + + SQLGetData(hstmt, CUSTOMER.CUSTOMER_COMMENT, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); + m_strCustomerComment = CheckForNull(szNameLong, cbName); + + SQLGetData(hstmt, CUSTOMER.CUSTOMER_GENERAL_LOG, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); + m_strCustomerHistoryLog = CheckForNull(szNameLong, cbName); + } + else + break; + } + } + if (!sql.CheckReturnCodeForClosing(retcode)) + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_FAIL); + else + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_OK); + } + sql.CloseConnection(); + theApp.EndWaitCursor(); + UpdateData(FALSE); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +void CClosedWorkorderCustomerDetailsTab::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_ID, m_strCustomerID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_NAME, m_strCustomerName); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_SURNAME, m_strCustomerSurname); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_CELLPHONE, m_strCustomerCellPhone); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_PHONE, m_strCustomerPhone); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_EMAIL, m_strCustomerEmail); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_COMMENT, m_strCustomerComment); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_HISTORY_LOG, m_strCustomerHistoryLog); +} \ No newline at end of file diff --git a/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.h b/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.h index 5ff9dc6..3c08d42 100644 --- a/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.h +++ b/RepairCafeCureApp/CClosedWorkorderCustomerDetailsTab.h @@ -1,26 +1,82 @@ +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + + To see the license for this source code, please visit: + + + For more information, please visit: + + + + For contacts, please use the contact form at: + + +*/ + +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderCustomerDetailsTab.h, defines class CClosedWorkorderCustomerDetailsTab +* +* This class is the view of the Customer-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the Customer-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ #pragma once -#include "CClosedWorkorderDetailsTabCtrl.h" -using namespace artvabas::rcc::ui::controls; +namespace artvabas::rcc::ui::dialogs { -class CClosedWorkorderCustomerDetailsTab : public CDialogEx -{ + class CClosedWorkorderCustomerDetailsTab : public CDialogEx + { #ifdef AFX_DESIGN_TIME - enum { IDD = IDD_CLOSED_WORKORDER_CUSTOMER_DETAILS_TAB }; + enum { IDD = IDD_CLOSED_WORKORDER_CUSTOMER_DETAILS_TAB }; #endif - DECLARE_DYNAMIC(CClosedWorkorderCustomerDetailsTab) + DECLARE_DYNAMIC(CClosedWorkorderCustomerDetailsTab) + + private: + unsigned int m_unCustomerID; -private: - CClosedWorkorderDetailsTabCtrl* m_pTabControl; - unsigned int m_unCustomerID; + CString m_strCustomerID; + CString m_strCustomerName; + CString m_strCustomerSurname; + CString m_strCustomerCellPhone; + CString m_strCustomerPhone; + CString m_strCustomerEmail; + CString m_strCustomerComment; + CString m_strCustomerHistoryLog; -public: - CClosedWorkorderCustomerDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent = nullptr); // standard constructor - virtual ~CClosedWorkorderCustomerDetailsTab(); + public: + CClosedWorkorderCustomerDetailsTab(unsigned int& unID, CWnd* pParent = nullptr); + virtual ~CClosedWorkorderCustomerDetailsTab(); -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + private: + BOOL OnInitDialog() override; + void DoDataExchange(CDataExchange* pDX) override; - DECLARE_MESSAGE_MAP() -}; + DECLARE_MESSAGE_MAP() + }; +} \ No newline at end of file diff --git a/RepairCafeCureApp/CClosedWorkorderDetailsTabCtrl.cpp b/RepairCafeCureApp/CClosedWorkorderDetailsTabCtrl.cpp index 8cbbbef..80a4414 100644 --- a/RepairCafeCureApp/CClosedWorkorderDetailsTabCtrl.cpp +++ b/RepairCafeCureApp/CClosedWorkorderDetailsTabCtrl.cpp @@ -64,10 +64,10 @@ CClosedWorkorderDetailsTabCtrl::CClosedWorkorderDetailsTabCtrl(unsigned int& unC , m_tabCurrent{ 0 } { try { - m_tabPages[0] = new CClosedWorkOrderDetailsTab(this, unWorkorderID); - m_tabPages[1] = new CClosedWorkorderAssetDetailsTab(this, unAssetID); - m_tabPages[2] = new CClosedWorkorderInvoiceDetailsTab(this, unInvoiceID); - m_tabPages[3] = new CClosedWorkorderCustomerDetailsTab(this, unCustomerID); + m_tabPages[0] = new CClosedWorkOrderDetailsTab(unWorkorderID); + m_tabPages[1] = new CClosedWorkorderAssetDetailsTab(unAssetID); + m_tabPages[2] = new CClosedWorkorderInvoiceDetailsTab(unInvoiceID); + m_tabPages[3] = new CClosedWorkorderCustomerDetailsTab(unCustomerID); } catch (std::bad_alloc& e) { AfxMessageBox(static_cast(e.what())); diff --git a/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.cpp b/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.cpp index b065b50..a445591 100644 --- a/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.cpp +++ b/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.cpp @@ -1,32 +1,227 @@ -// CClosedWorkorderInvoiceDetailsTab.cpp : implementation file -// +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + + To see the license for this source code, please visit: + + + For more information, please visit: + + + + For contacts, please use the contact form at: + + +*/ + +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderInvoiceDetailsTab.cpp, implements class CClosedWorkorderInvoiceDetailsTab +* +* This class is the view of the Invoice-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the invoice-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ #include "pch.h" #include "RepairCafeCureApp.h" #include "afxdialogex.h" #include "CClosedWorkorderInvoiceDetailsTab.h" +#include "CSqlNativeAVB.h" +#include "DatabaseTables.h" + +using namespace artvabas::rcc::ui::dialogs; +using namespace artvabas::sql; +using namespace artvabas::database::tables::invoice; +using namespace artvabas::database::tables::workorderparts; IMPLEMENT_DYNAMIC(CClosedWorkorderInvoiceDetailsTab, CDialogEx) -CClosedWorkorderInvoiceDetailsTab::CClosedWorkorderInvoiceDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent /*=nullptr*/) +CClosedWorkorderInvoiceDetailsTab::CClosedWorkorderInvoiceDetailsTab(unsigned int& unID, CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_CLOSED_WORKORDER_INVOICE_DETAILS_TAB, pParent) - , m_pTabControl{ pTabControl } , m_unInvoiceID{ unID } -{ - -} + , m_strInvoiceID{ _T("") } + , m_strInvoiceCustomerID{ _T("") } + , m_strInvoiceWorkorderID{ _T("") } + , m_strInvoiceAssetID{ _T("") } + , m_strInvoiceCreateDate{ _T("") } + , m_bInvoicePinTransaction{ FALSE } + , m_strInvoiceAmount{ _T("") } +{} CClosedWorkorderInvoiceDetailsTab::~CClosedWorkorderInvoiceDetailsTab() -{ -} +{} -void CClosedWorkorderInvoiceDetailsTab::DoDataExchange(CDataExchange* pDX) +BEGIN_MESSAGE_MAP(CClosedWorkorderInvoiceDetailsTab, CDialogEx) +END_MESSAGE_MAP() + +BOOL CClosedWorkorderInvoiceDetailsTab::OnInitDialog() { - CDialogEx::DoDataExchange(pDX); -} + CDialogEx::OnInitDialog(); + // Set up the list control + m_lstInvoiceSummary.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); + m_lstInvoiceSummary.InsertColumn(0, _T("Description"), LVCFMT_LEFT, 200); + m_lstInvoiceSummary.InsertColumn(1, _T("Amount"), LVCFMT_LEFT, 100); + m_lstInvoiceSummary.InsertColumn(2, _T("Unit Price"), LVCFMT_LEFT, 100); + m_lstInvoiceSummary.InsertColumn(3, _T("Total Price"), LVCFMT_LEFT, 100); -BEGIN_MESSAGE_MAP(CClosedWorkorderInvoiceDetailsTab, CDialogEx) -END_MESSAGE_MAP() + theApp.SetStatusBarText(IDS_STATUSBAR_LOADING); + theApp.BeginWaitCursor(); + + CString strBuildQuery; + strBuildQuery.Format(_T("SELECT * FROM INVOICE WHERE INVOICE_ID = %d"), m_unInvoiceID); + + CSqlNativeAVB sql{ theApp.GetDatabaseConnection()->ConnectionString() }; + if (sql.CreateSQLConnection()) { + SQLCHAR szName[SQLCHARVSMALL]{}; + SQLCHAR szNameLong[SQLCHARVMAX]{}; + SQLLEN cbName{}; + SQLRETURN retcode{}; + SQLHSTMT hstmt{ sql.GetStatementHandle() }; + SQLWCHAR* strQuery{ strBuildQuery.GetBuffer() }; + strBuildQuery.ReleaseBuffer(); + + retcode = SQLExecDirectW(hstmt, strQuery, SQL_NTS); + + if (retcode == SQL_SUCCESS) { + while (TRUE) { + retcode = SQLFetch(hstmt); + if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) + AfxMessageBox(_T("Error fetching data from Asset Table!"), MB_ICONEXCLAMATION); + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { + + auto CheckForNull = [](SQLCHAR* szName, SQLLEN cbName) -> CString { + if (cbName == SQL_NULL_DATA) { + return _T(""); + } + return static_cast(szName); + }; + SQLGetData(hstmt, INVOICE.INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, INVOICE.INVOICE_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceCustomerID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, INVOICE.INVOICE_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceAssetID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, INVOICE.INVOICE_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceWorkorderID = CheckForNull(szName, cbName); + + SQLGetData(hstmt, INVOICE.INVOICE_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceCreateDate = CheckForNull(szName, cbName); + + SQLGetData(hstmt, INVOICE.INVOICE_PAYMENT_PIN, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_bInvoicePinTransaction = _wtoi(CheckForNull(szName, cbName)); + + SQLGetData(hstmt, INVOICE.INVOICE_TOTAL, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + m_strInvoiceAmount.Format(_T("€%.2f"), _wtof(CheckForNull(szName, cbName))); + } + else + break; + } + } + if (!sql.CheckReturnCodeForClosing(retcode)) + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_FAIL); + else + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_OK); + + theApp.SetStatusBarText(IDS_STATUSBAR_LOADING); + strBuildQuery.Format(_T("SELECT * FROM WORKORDER_PARTS WHERE WORKORDER_PARTS_WORKORDER_ID = %d"), _wtoi(m_strInvoiceWorkorderID)); + + strQuery = strBuildQuery.GetBuffer(); + strBuildQuery.ReleaseBuffer(); + + retcode = SQLExecDirectW(hstmt, strQuery, SQL_NTS); + + if (retcode == SQL_SUCCESS) { + CString strDescription; + CString strAmount; + CString strTotalPrice; + CString strUnitPrice; + while (TRUE) { + retcode = SQLFetch(hstmt); + if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) + AfxMessageBox(_T("Error fetching data from Asset Table!"), MB_ICONEXCLAMATION); + if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { + + auto CheckForNull = [](SQLCHAR* szName, SQLLEN cbName) -> CString { + if (cbName == SQL_NULL_DATA) { + return _T(""); + } + return static_cast(szName); + }; + // Get data for columns 1, employee names + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + strDescription = CheckForNull(szName, cbName); + + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + strAmount = CheckForNull(szName, cbName); + + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_UNIT_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + strUnitPrice.Format(_T("%.2f"), _wtof(CheckForNull(szName, cbName))); + + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_TOTAL_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); + strTotalPrice.Format(_T("%.2f"), _wtof(CheckForNull(szName, cbName))); + + int nItem = m_lstInvoiceSummary.GetItemCount(); + m_lstInvoiceSummary.InsertItem(nItem, strDescription); + m_lstInvoiceSummary.SetItemText(nItem, 1, strAmount); + m_lstInvoiceSummary.SetItemText(nItem, 2, strUnitPrice); + m_lstInvoiceSummary.SetItemText(nItem, 3, strTotalPrice); + } + else + break; + } + } + if (!sql.CheckReturnCodeForClosing(retcode)) + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_FAIL); + else + theApp.SetStatusBarText(IDS_STATUSBAR_SELECT_OK); + } + sql.CloseConnection(); + theApp.EndWaitCursor(); + UpdateData(FALSE); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +void CClosedWorkorderInvoiceDetailsTab::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_ID, m_strInvoiceID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_CUSTOMER_ID, m_strInvoiceCustomerID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_WORKORDER_ID, m_strInvoiceWorkorderID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_ASSET_ID, m_strInvoiceAssetID); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_CREATE_DATE, m_strInvoiceCreateDate); + DDX_Check(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_PIN_PAYMENT, m_bInvoicePinTransaction); + DDX_Control(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_SUMMARY, m_lstInvoiceSummary); + DDX_Text(pDX, IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_AMOUNT, m_strInvoiceAmount); +} \ No newline at end of file diff --git a/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.h b/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.h index a2d1614..33a7ddf 100644 --- a/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.h +++ b/RepairCafeCureApp/CClosedWorkorderInvoiceDetailsTab.h @@ -1,25 +1,81 @@ -#pragma once -#include "CClosedWorkorderDetailsTabCtrl.h" +/* + Copyright (C) 2023/24 artvabas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see + + To see the license for this source code, please visit: + + + For more information, please visit: + + -using namespace artvabas::rcc::ui::controls; + For contacts, please use the contact form at: + -class CClosedWorkorderInvoiceDetailsTab : public CDialogEx -{ +*/ + +/* +* This file is part of RepairCafeCureApp. +* File: CClosedWorkorderInvoiceDetailsTab.h, defines class CClosedWorkorderInvoiceDetailsTab +* +* This class is the view of the Invoice-tab in the CClosedWorkorderDetailsTabCtrl class, +* which is the view of the CListCtrl created on the Closed Workorder Details dialog (CClosedWorkorderDetails) +* +* This form is used to display the invoice-details of a closed workorder. +* What is selected in the listview of the CReportWorkorderClosedView and passed to this form. +* +* Target: Windows 10/11 64bit +* Version: 1.0.0.3 (alpha) +* Created: 17-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) +* Creator: artvabasDev / artvabas +* +* Description: Database connection class +* License: GPLv3 +*/ +#pragma once + +namespace artvabas::rcc::ui::dialogs { + class CClosedWorkorderInvoiceDetailsTab : public CDialogEx + { #ifdef AFX_DESIGN_TIME - enum { IDD = IDD_CLOSED_WORKORDER_INVOICE_DETAILS_TAB }; + enum { IDD = IDD_CLOSED_WORKORDER_INVOICE_DETAILS_TAB }; #endif - DECLARE_DYNAMIC(CClosedWorkorderInvoiceDetailsTab) + DECLARE_DYNAMIC(CClosedWorkorderInvoiceDetailsTab) + + private: + unsigned int m_unInvoiceID; + BOOL m_bInvoicePinTransaction; + + CString m_strInvoiceID; + CString m_strInvoiceCustomerID; + CString m_strInvoiceWorkorderID; + CString m_strInvoiceAssetID; + CString m_strInvoiceCreateDate; + CString m_strInvoiceAmount; -private: - CClosedWorkorderDetailsTabCtrl* m_pTabControl; - unsigned int m_unInvoiceID; + CListCtrl m_lstInvoiceSummary; -public: - CClosedWorkorderInvoiceDetailsTab(CClosedWorkorderDetailsTabCtrl* pTabControl, unsigned int unID, CWnd* pParent = nullptr); // standard constructor - virtual ~CClosedWorkorderInvoiceDetailsTab(); + public: + CClosedWorkorderInvoiceDetailsTab(unsigned int& unID, CWnd* pParent = nullptr); + virtual ~CClosedWorkorderInvoiceDetailsTab(); -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + private: + BOOL OnInitDialog() override; + void DoDataExchange(CDataExchange* pDX) override; - DECLARE_MESSAGE_MAP() -}; + DECLARE_MESSAGE_MAP() + }; +} \ No newline at end of file diff --git a/RepairCafeCureApp/CCustomerView.cpp b/RepairCafeCureApp/CCustomerView.cpp index c99462b..cc8f6b6 100644 --- a/RepairCafeCureApp/CCustomerView.cpp +++ b/RepairCafeCureApp/CCustomerView.cpp @@ -248,7 +248,7 @@ void CCustomerView::OnClickedCustomViewButtonSearch() if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -272,22 +272,22 @@ void CCustomerView::OnClickedCustomViewButtonSearch() return static_cast(szName); }; - SQLGetData(hstmt, CUSTOMER.CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_ctlExistingCustomersList.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctlExistingCustomersList.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_NAME, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_NAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctlExistingCustomersList.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctlExistingCustomersList.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctlExistingCustomersList.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctlExistingCustomersList.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); SQLGetData(hstmt, CUSTOMER.CUSTOMER_COMMENT, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); diff --git a/RepairCafeCureApp/CReportTaxView.cpp b/RepairCafeCureApp/CReportTaxView.cpp index d7f5290..4cc0443 100644 --- a/RepairCafeCureApp/CReportTaxView.cpp +++ b/RepairCafeCureApp/CReportTaxView.cpp @@ -496,7 +496,7 @@ void CReportTaxView::OnBnClickedReportTaxPeriodCreate() noexcept if (sql.CreateSQLConnection()) { double dTotalAmount{ 0.0 }; - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -519,22 +519,22 @@ void CReportTaxView::OnBnClickedReportTaxPeriodCreate() noexcept return static_cast(szName); }; - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUTION_CREATEDATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUTION_CREATEDATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lstReportResultTax.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUITION_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUITION_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstReportResultTax.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstReportResultTax.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstReportResultTax.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstReportResultTax.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUTION_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, REPORT_CONTRIBUTION_TAX.CONTRIBUTION_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); auto strAmount = CheckForNull(szName, cbName); dTotalAmount += _tstof(strAmount); strAmount = strAmount.Left(strAmount.Find(_T('.')) + 3); diff --git a/RepairCafeCureApp/CReportWorkorderClosedView.cpp b/RepairCafeCureApp/CReportWorkorderClosedView.cpp index 21e06fc..e09a86b 100644 --- a/RepairCafeCureApp/CReportWorkorderClosedView.cpp +++ b/RepairCafeCureApp/CReportWorkorderClosedView.cpp @@ -382,7 +382,7 @@ void CReportWorkorderClosedView::OnShowWindow(BOOL bShow, UINT nStatus) if (sql.CreateSQLConnection()) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -406,31 +406,31 @@ void CReportWorkorderClosedView::OnShowWindow(BOOL bShow, UINT nStatus) }; // Get data for columns 1, employee names - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lstWorkorderClosedReport.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.ASSET_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 6, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 7, CheckForNull(szName, cbName)); - SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CLOSED_WORKORDERS.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lstWorkorderClosedReport.SetItemText(nIndex, 8, CheckForNull(szName, cbName)); } else diff --git a/RepairCafeCureApp/CWorkorderPartsDialog.cpp b/RepairCafeCureApp/CWorkorderPartsDialog.cpp index 039650c..4283713 100644 --- a/RepairCafeCureApp/CWorkorderPartsDialog.cpp +++ b/RepairCafeCureApp/CWorkorderPartsDialog.cpp @@ -403,7 +403,7 @@ bool CWorkorderPartsDialog::InitStockPartList() if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -427,16 +427,16 @@ bool CWorkorderPartsDialog::InitStockPartList() return static_cast(szName); }; - SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lscWorkorderStockPartList.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderStockPartList.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_IN_STOCK, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_IN_STOCK, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderStockPartList.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_PRICE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, SPAREPARTSTOCK.SPAREPART_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); CString strValue = static_cast(szName); auto dPrice = _ttof(strValue); strValue.Format(_T("%.2f"), dPrice); @@ -482,7 +482,7 @@ bool CWorkorderPartsDialog::InitAddedPartList() if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -509,21 +509,21 @@ bool CWorkorderPartsDialog::InitAddedPartList() return static_cast(szName); }; - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lscWorkorderAddedPartList.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderAddedPartList.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderStockPartList.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_UNIT_PRICE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_UNIT_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); dConvertToMoney = _ttof(static_cast(szName)); strValue.Format(_T("%.2f"), dConvertToMoney); m_lscWorkorderAddedPartList.SetItemText(nIndex, 3, strValue); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_TOTAL_PRICE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_TOTAL_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); dConvertToMoney = _ttof(static_cast(szName)); strValue.Format(_T("%.2f"), dConvertToMoney); m_lscWorkorderAddedPartList.SetItemText(nIndex, 4, strValue); diff --git a/RepairCafeCureApp/CWorkorderTab.cpp b/RepairCafeCureApp/CWorkorderTab.cpp index 8bdc4a0..48c41d3 100644 --- a/RepairCafeCureApp/CWorkorderTab.cpp +++ b/RepairCafeCureApp/CWorkorderTab.cpp @@ -271,7 +271,7 @@ void CWorkorderTab::InitWithAssetDetailsRecords() if (sql.CreateSQLConnection()) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -295,34 +295,34 @@ void CWorkorderTab::InitWithAssetDetailsRecords() }; // Get data for columns 1, employee names - SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_ctrWorkordersHistoryList.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_DESCRIPTION, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 6, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 7, CheckForNull(szName, cbName)); SQLGetData(hstmt, WORKORDER.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVMAX, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 8, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_ctrWorkordersHistoryList.SetItemText(nIndex, 9, CheckForNull(szName, cbName)); SQLGetData(hstmt, WORKORDER.WORKORDER_HISTORY, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); @@ -409,7 +409,7 @@ void CWorkorderTab::PrintReceiptAndWorkorder() strBuildQuery.Format(_T("SELECT CUSTOMER.*, CUSTOMER_ID AS Expr1 FROM CUSTOMER WHERE(CUSTOMER_ID = %d)"), m_uiCustomerID); - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -433,13 +433,13 @@ void CWorkorderTab::PrintReceiptAndWorkorder() return _T(""); return static_cast(szName); }; - SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); strCustomerCellPhone = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); strCustomerPhone = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); strCustomerEmail = CheckForNull(szName, cbName); } else diff --git a/RepairCafeCureApp/CWorkorderView.cpp b/RepairCafeCureApp/CWorkorderView.cpp index 9d8da2b..a85d420 100644 --- a/RepairCafeCureApp/CWorkorderView.cpp +++ b/RepairCafeCureApp/CWorkorderView.cpp @@ -823,7 +823,7 @@ void CWorkorderView::InitWorkorderExistingList() { if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -848,34 +848,34 @@ void CWorkorderView::InitWorkorderExistingList() { }; // Get data for columns 1, employee names - SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lscWorkorderExisting.InsertItem(row++, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_ASSET_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 1, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CUSTOMER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_INVOICE_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 3, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 4, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CREATE_BY, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 5, CheckForNull(szName, cbName)); SQLGetData(hstmt, WORKORDER.WORKORDER_DESCRIPTION, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 6, CheckForNull(szNameLong, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_RESPONSIBLE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 7, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_STATUS, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 8, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDER.WORKORDER_CLOSED_DATE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderExisting.SetItemText(nIndex, 9, CheckForNull(szName, cbName)); SQLGetData(hstmt, WORKORDER.WORKORDER_HISTORY, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); @@ -911,7 +911,7 @@ void CWorkorderView::InitWorkorderEmployeeResponsibleComboBox() { if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLLEN cbName{}; SQLRETURN retcode{}; SQLHSTMT hstmt{ sql.GetStatementHandle() }; @@ -935,7 +935,7 @@ void CWorkorderView::InitWorkorderEmployeeResponsibleComboBox() { }; // Get data for columns 1, employee names - SQLGetData(hstmt, 1, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, 1, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_cbxWorkorderEmployeeResponsible.AddString(CheckForNull(szName, cbName)); } else @@ -970,7 +970,7 @@ void CWorkorderView::InitWorkorderSparePartsList() { if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -1000,21 +1000,21 @@ void CWorkorderView::InitWorkorderSparePartsList() { }; // Get data for columns 1, employee names - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_WORKORDER_ID, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); nIndex = m_lscWorkorderSpareParts.InsertItem(row++, CheckForNull(szName, cbName)); SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_DESCRIPTION, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); m_lscWorkorderSpareParts.SetItemText(nIndex, 1, CheckForNull(szNameLong, cbName)); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_AMOUNT, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_lscWorkorderSpareParts.SetItemText(nIndex, 2, CheckForNull(szName, cbName)); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_UNIT_PRICE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_UNIT_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); dConvertToMoney = _ttof(CheckForNull(szName, cbName)); strConvert.Format(_T("% .2f"), dConvertToMoney); m_lscWorkorderSpareParts.SetItemText(nIndex, 3, strConvert); - SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_TOTAL_PRICE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, WORKORDERPARTS.WORKORDER_PARTS_TOTAL_PRICE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); dTotalPrice += (dConvertToMoney = _ttof(CheckForNull(szName, cbName))); strConvert.Format(_T("% .2f"), dConvertToMoney); m_lscWorkorderSpareParts.SetItemText(nIndex, 4, strConvert); @@ -1112,7 +1112,7 @@ bool CWorkorderView::GetAssetInfo(const unsigned int& nAssetId) { if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -1140,10 +1140,10 @@ bool CWorkorderView::GetAssetInfo(const unsigned int& nAssetId) { SQLGetData(hstmt, ASSET.ASSET_DESCRIPTION, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); m_strAssetDescription = CheckForNull(szNameLong, cbName); - SQLGetData(hstmt, ASSET.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_MODEL_NUMBER, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strAssetModelNumber = CheckForNull(szName, cbName); - SQLGetData(hstmt, ASSET.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, ASSET.ASSET_BRAND, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strAssetBrand = CheckForNull(szName, cbName); SQLGetData(hstmt, ASSET.ASSET_HISTORY_LOG, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); @@ -1179,7 +1179,7 @@ bool CWorkorderView::GetCustomerInfo(const unsigned int& nCustomerId) { if ( sql.CreateSQLConnection() ) { - SQLCHAR szName[SQLCHARVSMAL]{}; + SQLCHAR szName[SQLCHARVSMALL]{}; SQLCHAR szNameLong[SQLCHARVMAX]{}; SQLLEN cbName{}; SQLRETURN retcode{}; @@ -1207,16 +1207,16 @@ bool CWorkorderView::GetCustomerInfo(const unsigned int& nCustomerId) { SQLGetData(hstmt, CUSTOMER.CUSTOMER_SURNAME, SQL_C_CHAR, szName, SQLCHARVMAX, &cbName); m_strCustomerSurname = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_NAME, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_NAME, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strCustomerName = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_CELL_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strCustomerCellPhone = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_PHONE, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strCustomerPhone = CheckForNull(szName, cbName); - SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMAL, &cbName); + SQLGetData(hstmt, CUSTOMER.CUSTOMER_EMAIL, SQL_C_CHAR, szName, SQLCHARVSMALL, &cbName); m_strCustomerEmail = CheckForNull(szName, cbName); SQLGetData(hstmt, CUSTOMER.CUSTOMER_COMMENT, SQL_C_CHAR, szNameLong, SQLCHARVMAX, &cbName); diff --git a/RepairCafeCureApp/DatabaseTables.h b/RepairCafeCureApp/DatabaseTables.h index 494033a..1d49231 100644 --- a/RepairCafeCureApp/DatabaseTables.h +++ b/RepairCafeCureApp/DatabaseTables.h @@ -34,16 +34,16 @@ * It is used to avoid hardcoding the SQL column indexes in the project * * Target: Windows 10/11 64bit -* Version: 1.0.0.1 (Alpha) +* Version: 1.0.0.3 (Alpha) * Created: 25-04-2024, (dd-mm-yyyy) -* Updated: 12-06-2024, (dd-mm-yyyy) +* Updated: 30-06-2024, (dd-mm-yyyy) * Creator: artvabasDev / artvabas * * License: GPLv3 */ #pragma once // Arrays sizes (wchar_t) -#define SQLCHARVSMAL 50 +#define SQLCHARVSMALL 50 #define SQLCHARVMAX 1024 namespace artvabas::database::tables { @@ -107,6 +107,18 @@ namespace artvabas::database::tables { SQLUSMALLINT WORKORDER_HISTORY { 11 }; }WORKORDER; } + + namespace invoice { + constexpr struct invoice { + SQLUSMALLINT INVOICE_ID{ 1 }; + SQLUSMALLINT INVOICE_CUSTOMER_ID{ 2 }; + SQLUSMALLINT INVOICE_ASSET_ID{ 3 }; + SQLUSMALLINT INVOICE_WORKORDER_ID{ 4 }; + SQLUSMALLINT INVOICE_CREATE_DATE{ 5 }; + SQLUSMALLINT INVOICE_PAYMENT_PIN{ 6 }; + SQLUSMALLINT INVOICE_TOTAL{ 7 }; + }INVOICE; + } namespace historysearch { constexpr struct search { diff --git a/RepairCafeCureApp/RepairCafeCureApp.cpp b/RepairCafeCureApp/RepairCafeCureApp.cpp index 7edcdf0..b8da4fc 100644 --- a/RepairCafeCureApp/RepairCafeCureApp.cpp +++ b/RepairCafeCureApp/RepairCafeCureApp.cpp @@ -96,7 +96,7 @@ CRepairCafeCureApp::CRepairCafeCureApp() noexcept , m_bIsIdle{ true } , m_bIsPrintPreview{ false } { - SetAppID(_T("RepairCafeCureApp.AppID.1.0.0.2")); + SetAppID(_T("RepairCafeCureApp.AppID.1.0.0.3")); SetTimer(NULL, 1, (1000 * 60), TimerCallback); } diff --git a/RepairCafeCureApp/RepairCafeCureApp.rc b/RepairCafeCureApp/RepairCafeCureApp.rc index 73dea8f..247b734 100644 Binary files a/RepairCafeCureApp/RepairCafeCureApp.rc and b/RepairCafeCureApp/RepairCafeCureApp.rc differ diff --git a/RepairCafeCureApp/Resource.h b/RepairCafeCureApp/Resource.h index 61cf7d6..c7d782d 100644 --- a/RepairCafeCureApp/Resource.h +++ b/RepairCafeCureApp/Resource.h @@ -191,6 +191,31 @@ #define IDC_CLOSED_WORKORDER_TAB_DESCRIPTION 1126 #define IDC_CLOSED_WORKORDER_TAB_STATUS 1127 #define IDC_CLOSED_WORKORDER_TAB_HISTORY_LOG 1128 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_ASSET_ID 1129 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_CUSTOMER_ID 1130 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_DISPOSED 1131 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_CREATE_DATE 1132 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_DESCRIPTION 1133 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_MODEL 1134 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_BRAND 1135 +#define IDC_CLOSED_WORKORDER_ASSET_TAB_HISTORY_LOG 1136 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_ID 1137 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_CUSTOMER_ID 1138 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_WORKORDER_ID 1139 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_ASSET_ID 1140 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_CREATE_DATE 1141 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_PIN_PAYMENT 1142 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_SUMMARY 1143 +#define IDC_CLOSED_WORKORDER_INVOICE_TAB_INVOICE_AMOUNT 1144 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_NAME 1146 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_SURNAME 1147 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_CELLPHONE 1148 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_PHONE 1149 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_EMAIL 1150 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_COMMENT 1151 +#define IDC_EDIT8 1152 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_HISTORY_LOG 1152 +#define IDC_CLOSED_WORKORDER_CUSTOMER_TAB_CUSTOMER_ID 1153 #define ID_WRITE_PASTEASHYPERLINK 32770 #define ID_CUSTOMER_VIEW 32773 #define ID_APP_VIEW 32775 @@ -211,7 +236,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 362 #define _APS_NEXT_COMMAND_VALUE 32793 -#define _APS_NEXT_CONTROL_VALUE 1129 +#define _APS_NEXT_CONTROL_VALUE 1154 #define _APS_NEXT_SYMED_VALUE 318 #endif #endif diff --git a/RepairCafeCureApp/res/ribbon.mfcribbon-ms b/RepairCafeCureApp/res/ribbon.mfcribbon-ms index 006097c..e6bc613 100644 --- a/RepairCafeCureApp/res/ribbon.mfcribbon-ms +++ b/RepairCafeCureApp/res/ribbon.mfcribbon-ms @@ -1 +1 @@ -
1
RibbonBarTRUETRUETRUETRUEFALSEIDB_BUTTONS119Button_MainFFALSEFALSE-1-1TRUEIDB_MAIN116Category_MainFileIDB_FILESMALL121IDB_FILELARGE120ButtonID_FILE_PRINT57607PrintPWFALSEFALSE00TRUEFALSELabelPreview and print the documentFALSEFALSE-1-1TRUEButtonID_FILE_PRINT_DIRECT57608&Quick PrintQFALSEFALSE11TRUETRUEButtonID_FILE_PRINT_PREVIEW57609Print Pre&viewVFALSEFALSE22TRUETRUEButtonID_FILE_PRINT_SETUP57606Print Set&upSFALSEFALSE33TRUETRUEButton_Main_PanelID_APP_EXIT57665E&xitEFALSEFALSE4-1TRUEFALSE300QATTRUEID_FILE_NEW57600TRUEID_FILE_OPEN57601TRUEID_FILE_SAVE57603TRUEID_FILE_PRINT_DIRECT57608TRUEGroupButtonID_APP_ABOUT57664AFALSEFALSE0-1TRUEFALSECategoryCafe RepairCIDB_REPAIRCAFESMALL325IDB_REPAIRCAFELARGE324PanelCustomerO-1FALSEFALSEButtonID_CUSTOMER_VIEW32773CustomerCFALSEFALSE00TRUEFALSEPanelWorkorder-1FALSEFALSEButtonID_WORKORDER_VIEW_OPEN32776OpenOFALSEFALSE11TRUEFALSESeparatorFALSEButtonID_WORKORDER_VIEW_PROGRESS32777ProgressPFALSEFALSE22TRUEFALSESeparatorFALSEButtonID_WORKORDER_VIEW_REPAIRED32778RepairedRFALSEFALSE33TRUEFALSEPanelRepaired-1FALSEFALSEButtonID_APP_VIEW32775HistoryHFALSEFALSE44TRUEFALSECategoryReportsRIDB_REPORTSMALL346IDB_REPORTLARGE345PanelFinance-1FALSEFALSEButtonID_REPORT_VIEW_FINANCE_TAX32789ContributionCFALSEFALSE00TRUEFALSESeparatorFALSEButtonID_REPORT_WORKORDER_PINTRANSACTION32792PinFALSEFALSE22TRUEFALSEPanelWorkorder-1FALSEFALSEButtonID_REPORT_WORKORDER_CLOSED32791ClosedWFALSEFALSE11TRUEFALSECategoryMaintenanceMPanelCustomers-1FALSEFALSEPanelAssets-1FALSEFALSEPanelWorkorders-1FALSEFALSEPanelFinances-1FALSEFALSECategoryGeneralGPanelView-1FALSEFALSEButton_CheckID_GENERAL_SHOW_LOGINBAR_CHECK32788Show LoginbarFALSEFALSE-1-1TRUEContextID_CONTEXT_WORKORDER32781Workorder2CategoryExtraEIDB_WORKORDEREXTRASMALL329IDB_WORKORDEREXTRALARGE327PanelPrint-1FALSEFALSEButtonID_WORKORDER_EXTRA_COMBI32785CombiCFALSEFALSE00TRUEFALSESeparatorFALSEButtonID_WORKORDER_EXTRA_INVOICE32786InvoiceIFALSEFALSE11TRUEFALSE
\ No newline at end of file +
1
RibbonBarTRUETRUETRUETRUEFALSEIDB_BUTTONS119Button_MainFFALSEFALSE-1-1TRUEIDB_MAIN116Category_MainFileIDB_FILESMALL121IDB_FILELARGE120ButtonID_FILE_PRINT57607PrintPWFALSEFALSE00TRUEFALSELabelPreview and print the documentFALSEFALSE-1-1TRUEButtonID_FILE_PRINT_DIRECT57608&Quick PrintQFALSEFALSE11TRUETRUEButtonID_FILE_PRINT_PREVIEW57609Print Pre&viewVFALSEFALSE22TRUETRUEButtonID_FILE_PRINT_SETUP57606Print Set&upSFALSEFALSE33TRUETRUEButton_Main_PanelID_APP_EXIT57665E&xitEFALSEFALSE4-1TRUEFALSE300QATTRUEID_FILE_NEW57600TRUEID_FILE_OPEN57601TRUEID_FILE_SAVE57603TRUEID_FILE_PRINT_DIRECT57608TRUEGroupButtonID_APP_ABOUT57664AFALSEFALSE0-1TRUEFALSECategoryCafe RepairCIDB_REPAIRCAFESMALL325IDB_REPAIRCAFELARGE324PanelCustomerO-1FALSEFALSEButtonID_CUSTOMER_VIEW32773CustomerCFALSEFALSE00TRUEFALSEPanelWorkorder-1FALSEFALSEButtonID_WORKORDER_VIEW_OPEN32776OpenOFALSEFALSE11TRUEFALSESeparatorFALSEButtonID_WORKORDER_VIEW_PROGRESS32777ProgressPFALSEFALSE22TRUEFALSESeparatorFALSEButtonID_WORKORDER_VIEW_REPAIRED32778RepairedRFALSEFALSE33TRUEFALSEPanelRepaired-1FALSEFALSEButtonID_APP_VIEW32775HistoryHFALSEFALSE44TRUEFALSECategoryReportsRIDB_REPORTSMALL346IDB_REPORTLARGE345PanelFinance-1FALSEFALSEButtonID_REPORT_VIEW_FINANCE_TAX32789ContributionCFALSEFALSE00TRUEFALSESeparatorFALSEButtonID_REPORT_WORKORDER_PINTRANSACTION32792PinFALSEFALSE22TRUEFALSEPanelWorkorder-1FALSEFALSEButtonID_REPORT_WORKORDER_CLOSED32791ClosedWFALSEFALSE11TRUEFALSECategoryMaintenanceMPanelEmployees-1FALSEFALSEPanelStock Parts-1FALSEFALSECategoryGeneralGPanelView-1FALSEFALSEButton_CheckID_GENERAL_SHOW_LOGINBAR_CHECK32788Show LoginbarFALSEFALSE-1-1TRUEContextID_CONTEXT_WORKORDER32781Workorder2CategoryExtraEIDB_WORKORDEREXTRASMALL329IDB_WORKORDEREXTRALARGE327PanelPrint-1FALSEFALSEButtonID_WORKORDER_EXTRA_COMBI32785CombiCFALSEFALSE00TRUEFALSESeparatorFALSEButtonID_WORKORDER_EXTRA_INVOICE32786InvoiceIFALSEFALSE11TRUEFALSE
\ No newline at end of file