From c5f66ffb0b2a286f37cca78e64668bd7ac61baf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=91=CF=81=CE=B8=CE=BF=CF=8D=CF=81=CE=BF=CF=82=20=CF=84?= =?UTF-8?q?=CE=BF=CF=85=20=CE=9C=CF=80=CE=AC=CF=83=CF=84=CE=B5=CE=BD=20-?= =?UTF-8?q?=20=CE=B1=CF=81=CF=84=CE=B7=CE=BD=CF=81?= <79010792+artvabas@users.noreply.github.com> Date: Sun, 30 Jun 2024 23:45:25 +0200 Subject: [PATCH] Refactor and bug fixes across application modules This commit encompasses a wide range of changes aimed at correcting critical typos, refactoring class dependencies, enhancing code documentation and organization, and improving the representation of asset details within the application. Key changes include: - Corrected the misspelling of `SQLCHARVSMAL` to `SQLCHARVSMALL` in SQL data retrieval calls across multiple files, fixing a potential bug related to buffer size misidentification. - Removed dependencies of certain classes on `CClosedWorkorderDetailsTabCtrl`, simplifying constructors and decoupling class relationships. - Updated documentation comments and licensing information in several files to clarify file purposes, licensing, and authorship. - Introduced and organized code with namespaces to improve readability and structure. - Modified `OnInitDialog` and `DoDataExchange` methods to align with updated class definitions and buffer size corrections. - Enhanced asset details representation by adding and updating class member variables with comprehensive asset information. - Added copyright and GNU Affero General Public License notices in specific files, emphasizing the open-source nature of the software. - Refactored constructors to use direct unsigned integer references for initialization and implemented database integration for fetching customer and invoice details. - Updated UI elements and data binding to reflect new and fetched data, improving the user interface. - Incremented application and database version information to reflect ongoing development and modifications. - Restructured the "Maintenance" category within the application to focus on different aspects of maintenance management. These changes collectively aim to improve the application's functionality, code quality, and user experience. --- RepairCafeCureApp/CAssetTab.cpp | 16 +- RepairCafeCureApp/CAssetView.cpp | 16 +- .../CClosedWorkOrderDetailsTab.cpp | 28 +-- .../CClosedWorkOrderDetailsTab.h | 14 +- .../CClosedWorkorderAssetDetailsTab.cpp | 172 ++++++++++++-- .../CClosedWorkorderAssetDetailsTab.h | 90 +++++-- .../CClosedWorkorderCustomerDetailsTab.cpp | 168 +++++++++++-- .../CClosedWorkorderCustomerDetailsTab.h | 88 +++++-- .../CClosedWorkorderDetailsTabCtrl.cpp | 8 +- .../CClosedWorkorderInvoiceDetailsTab.cpp | 223 ++++++++++++++++-- .../CClosedWorkorderInvoiceDetailsTab.h | 90 +++++-- RepairCafeCureApp/CCustomerView.cpp | 14 +- RepairCafeCureApp/CReportTaxView.cpp | 14 +- .../CReportWorkorderClosedView.cpp | 20 +- RepairCafeCureApp/CWorkorderPartsDialog.cpp | 22 +- RepairCafeCureApp/CWorkorderTab.cpp | 28 +-- RepairCafeCureApp/CWorkorderView.cpp | 50 ++-- RepairCafeCureApp/DatabaseTables.h | 18 +- RepairCafeCureApp/RepairCafeCureApp.cpp | 2 +- RepairCafeCureApp/RepairCafeCureApp.rc | Bin 108654 -> 118094 bytes RepairCafeCureApp/Resource.h | 27 ++- RepairCafeCureApp/res/ribbon.mfcribbon-ms | 2 +- 22 files changed, 885 insertions(+), 225 deletions(-) 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 73dea8f70e1a9646aa81301f9ce7cdd6baaf3011..247b734163658a14f7f7f85010b0e9d2c465c70f 100644 GIT binary patch delta 2391 zcmaJ?TTE0}6g^vUC=LT7Bf&>NpcG#t+{e7|(K3ovD&SN>F~%YmYWh$L6f5ZiMwBRM zRCeRBnx8QHtF%e`(;sZp)Gw+@Kl)Kk_daLtfVMW1Id|sXyZ2dp z@3q#M9CzJ3mpWV$0(+!1bpI$_R(yTL12&G_FljCQZvM!F8{V1p6K<^-Sv`JyhWeQ^ zGV#N~&u48C&7yO(u^Vi!Cm@2tFY<*&*MJ;41wZ2Ww}tXS95S+-=)L{o4e>I4JLw%2 zCn;`mnjuUI3knOPWu^SKAHR6VC9OlygymJ~82j0^ut7w{R{E?LwW2{(iVBJd34>M> zhpxRTjUEWN1N7Gx5n2Oyv3`x5=!1MG1Kv3{H!T?_|LB1o*!^xH=5=JuZzN33gsG7b zHqmt}{pWifc=2+9FGTsmyb;yq0KMH};_kPfkp5oq&*BHR+|>(voz3L+URW^4q%cbb zGNho0;8067-YhT7uAnxwi`PX9tM2Ma;OKEI~nk~ssq_;2}y&fqN1OrvTNyD zFKTgU*HVmK&C0e#8Kt$U4ODLep@9XfN~xv*8rM@YLv-KI;8df+Xl^hE1}z+{PjPce z97suIYY*&9?)%>H1)h+aW0)RN)$(31w0o)vE06FsYEKO|RxHNBpewCRZ4h`Q2Mw!Q zY^D*dC+s{XW<{Cmoz8}_3&k`nZl*~e3*#4_k%Pye&_R*gAl8a4H1e9npgDs{RdB_o zG><|%6`77%Ck-ytXL23%$fl3ZN{y&1dzb)!)_8IF5fNb-KMA*F z`T%SkE$M<3kgptutj7~~X)2=%3R}^Z-Zj#g_}p+4t`wQ?r%JA| zno{t+*#YfXoCKi*!QbR&d-=g3>~e$WgIiU2cw}bk@j}v=uXP-Z#Z= zizdKNILYa@s1lp%n*BJKQKjKJ0$;1*%2c@&FDzMl1UAWQgRn{d$sI(h!Ec*AKzzX3e0caef>jYZ~XZ!xMPkvV-HYQfp`i zL^Lcoo}0nlF#TbBD)BxKsIO|ownu{9NXt733D8s zBDiK-RLeI3Djz35n5|;9acWO;Y@N;$h3~0#G#EbUh@iCQ)7<_ z=TEHClXlvQ-W?g4hVp_(V)wKa&!l5QzTXFXlUoh6rzdubBuE%hdUR^_aILHgb+mI$ z)E>uPH6_{I9Vbra#e+M&3!V3@q#Zlwfx$*B@ov{L)luAd-jJtGKuV6DmJ_Jk_TL-a zIX^GgBnM$l^YN^&LDesYsJ8f6j#t3&XxT|5ho5JvcExg0yAZKYUFo`b{k o@>#gV@Rub2Hi0z~|J4Wh_iroZ*jr%WC%@P8kD}3%51~BmAFx4O2LJ#7 delta 401 zcmX>%i~ZdNwhek_j7FRF&Hi=(Dc$|8yo^SZH=i*ClKN*QH~%{$zzk$Ep4Z)MbD@U` z%oN}J;8Mj}_ArJ-h8%{{=?6O)m8S>HXXM!4*1*Umz-z!@$)Llaz+lK=&R{lOa315; z$qva%(+d_ea!p>>EyZuaU;vaiWiSDfh76XI`%lPEKTyr6H2uILMuF*P<}zB~GNNxj zBj4nt!n*QM^qr~)r35*K3ObM9GC@^_O8qZ`sXFgs_ zuw%@?r14}yE6M2>To^ZO|F?_r2Q#C=
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