Upload
charis
View
47
Download
0
Embed Size (px)
DESCRIPTION
Accounting Module In ERP. Students: Hoàng Phương Thảo Tạ Trung Kiên Nguyễn Tấn Trí Lưu Hằng My Nguyễn Văn Tiệp. Supervisor: Mr . Nguyễn Hồng Kỳ. Contents. Introduction . Project Management Plan. Requirement Specifications . Design Description . Implementation . - PowerPoint PPT Presentation
Citation preview
LOGO
Accounting Module In ERP
Supervisor: Mr. Nguyễn Hồng Kỳ
Students: Hoàng Phương Thảo Tạ Trung Kiên Nguyễn Tấn Trí Lưu Hằng My Nguyễn Văn Tiệp
Contents
Introduction
Project Management Plan
Requirement Specifications
Design Description
Implementation
Test Documentation
Demo & Q&A
Part 1: Introduction
Background
Literature Review
Our Proposal
Products
Background
The management of goods, statistics, accounting…in paper have many disadvantages
Having many popular software which are used to management business through by machine and database.
Development of ERP system In Vietnam, they still have many limitations.
=> We developed an accounting module in ERP
Literature review
Having high price
Incompatibility with the Vietnamese accounting system
Wasting time for training, human resources
Complexity of warranty and repair
Literature review
Design is untight and simple
General ledger system has not satisfied requirement of user
Security is low
Our proposal Developing accounting module for the service companies
that use ERP system Building on web-based with advanced technology Database is managed by SQL server platform Building on N-tier architecture
Part 2: Project Management Plan
The proposed system
Development Environment
Process
Project organization
Project Planning
The proposed system
User Functions System feature Boundaries
Development EnvironmentHardware
Operating system: Windows 7Personal computers for developing with the minimum
configuration: 3 Gb of RAM, 100Gb of hard disk, Core 2 Duo 2.0 Ghz
SoftwareVisual Studio 2010SQL Server 2008Web Server: IIS 7Framework: .NET Framework 4.0
Project’s process model
Waterfall model
Project organization
Project Management Plan Work breakdown structure Responsibility Assignment Matrix Risk management plan
Part 3: System Requirement Specifications
User Requirements
System Requirements
Non-functional requirements*
User requirements
UsersVouchersPortfolioGeneral AccountingReports
Users
User can add new fiscal year, fiscal period. User can add new one of portfolios, edit or delete it User can add new a voucher such as: “Phiếu kế toán, hóa đơn bán
hàng, phiếu nhập mua hàng…” edit, or delete them User can access general ledger as “bút toán khóa sổ”, “tính hàng tồn
kho”… User can see all another user activity by accessing diary. User can see all report in the AMIE system and print it if he/she
needs. …
Vouchers AMIE have some vouchers: Phiếu kế toán, hóa đơn bán hàng, phiếu
nhập mua hàng… To edit a voucher, user clicks on the “Chi Tiết” hyperlink in the left of
row which contains some voucher’s summary. If RecordToLedgerDate is not null, user click on the “Sửa” button to edit.
To delete a voucher or more voucher, user ticks on the check box in the left of row thich contains some voucher’s summary, and then click on the “Xóa” button to delete
To view list of voucher which has order by user want. You can use filler by filling some word on the top of column.
Portfolio Danh mục sổ kế toán Danh mục đối tác Danh mục tài khoản Danh mục hàng hóa Danh mục kho Danh mục mã giao dịch Danh mục tiền tệ Danh mục loại nguồn vốn Danh mục loại tài sản cố định …
General Accounting
General business operations of the accounting system. Add new fiscal year, fiscal period Posting balance Works was normally conducted at the beginning of fiscal
period, year or ending of fiscal period, year. Calculate total inventory in the end of fiscal period
Reports
Sổ nhật ký chung Bảng cân đối kế toán Báo cáo kết quả hoạt động kinh doanh Reports have printing function
System Requirement
Document requirements as use-cases Each use case include:
Use case diagram Actor Summary Goals Triggers Preconditions Post conditions
System Requirement
Each use case include: Main success scenarios Alternative scenarios Exceptions Relationship Business rules Description Screen Data field definitions
System Requirement
Screen: Before implementation: created using Balsamiq
Mockups software.
After implementation: screenshot from real system
System Requirement
After
Before
System Requirement
Data Fields Definition: Field name Description Read-only Mandatory Control type Data type Length
Non-functional requirements
Usability Reliability Availability Security Maintainability Performance
Non-functional requirements
Usability:
All most text, image text in front-end should be in Vietnamese The interface should be elegant, simple and out-standing Searching tool should be easy to use Check validation in all form and easy to see, understand. …
Non-functional requirements
Reliability:
Not conflict with other software Log any actions of user in system. Mean Time Between Failures (MTBF): 1 month Mean Time To Repair (MTTR): immediately when admin
finds out problem. Average 1 day. Maximum Bugs or Defect Rate: 3 bugs / KLOC
Non-functional requirementsAvailability:
Systems have to run 24 hours 7 days Can be turned off when upgrading and must display an
alternative maintenance page in such occasions
Non-functional requirements
Security:
User have to login to system. Auto logout user when website not work about 30 minutes. User password must be invisible for the system administrator Log any actions of user in system.
Non-functional requirementsMaintainability:
Follow coding standard and naming conventions Loosely coupled design Logging functionality
Performance:
Frequently accessed data must be cached Reference data must be cached
Part 4: Software Design Description
Architectural design
Detailed design
Database design
Architectural design
Architectural design
Main components
Architectural design
Sub component diagram
Common component
Detailed design: Class DiagramPReceiptMng
«interface»
Attributes+ _receiptVoucherMngBal+ _transactionVouchers+ _writeLogOperations+ bDelete_OnClick(object sender, EventArgs e)+ HideExpandColumnRecursive(GridTableView tableView)+ Page_Load(object sender, EventArgs e)+ RadAjaxManager1_Requested(object sender, AjaxRequestEventArgs e)+ rgPurchaseReceipt_Init(object sender, EventArgs e)+ rgPurchaseReceipt_ItemCreated(object sender, GridItemEventArgs e)+ rgPurchaseReceipt_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)+ rgPurchaseReceipt_PreRender(object sender, EventArgs e)
PReceiptVoucherMng BAL
Attributes+ _receiptVoucherMngDalOperations+ Deleted(TransactionVouchers tv, WriteLog wl)+ LoadSourceOfPurchaseReceiptGv()+ PReceiptVoucherMngBAL()
PReceiptVoucherMng DAL
Attributes+ ConnectionString+ _connOperations+ Deleted(TransactionVouchers tv, WriteLog wl)+ GetSourceOfPurchaseReceiptGridview()+ PReceiptVoucherMngDAL()
PEReceiptVoucher«interface»
Attributes+ _caching+ _loadTableInfoBal+ _pBal+ _transactionVoucher+ _writeLogOperations+ AccountNotGridIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ bAccept_Clicked(object sender, EventArgs e)+ bEdit_Clicked(object sender, EventArgs e)+ CbAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbBookNo_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbBookNo_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbDiscountAccount_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbGoods_ItemIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbGoods_ItemRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbInventory_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbInventory_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbTaxAccount_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CheckCostValue()+ dpPaymentDate_DateChanged(object sender, SelectedDateChangedEventArgs e)+ HideExpandColumnRecursive(GridTableView tableView)+ OnItemDataBoundHandler(object sender, GridItemEventArgs e)+ Page_Load(object sender, EventArgs e)+ RadGrid_Init(object sender, System.EventArgs e)+ RadGrid_ItemDeleted(object source, GridCommandEventArgs e)+ RadGrid_ItemInserted(object source, GridCommandEventArgs e)+ RadGrid_ItemUpdated(object source, GridCommandEventArgs e)+ RadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)+ RadGrid_PreRender(object sender, EventArgs e)+ txtDiscountRate_TextChanged(object sender, EventArgs e)+ txtPrice_TextChanged(object sender, EventArgs e)+ txtPSupplier_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ txtPSupplier_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ txtQuantity_TextChanged(object sender, EventArgs e)
PEReceiptVoucher BAL
Attributes+ _pDalOperations+ CostCalculation(DataTable table, double rate)+ Insert(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)+ LoadEmptyTable()+ LoadSupplierInfo(DataTable tb, int id)+ TotalCalculation(double GoodsPayment, double Taxpayment, double rate)
PEReceiptVoucher DAL
Attributes+ _adapter+ _conn+ _connStrOperations+ GetEmptyTable(int id)+ Insert(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)+ PAReceiptVoucherDAL()
PAReceiptVoucher«interface»
Attributes+ _caching+ _loadTableInfoBal+ _pBal+ _transactionVoucher+ _writeLogOperations+ AccountNotGridIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ bAccept_Clicked(object sender, EventArgs e)+ CbAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbBookNo_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbBookNo_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbDiscountAccount_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbGoods_ItemIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbGoods_ItemRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbInventory_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ cbInventory_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ cbTaxAccount_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CheckCostValue()+ dpPaymentDate_DateChanged(object sender, SelectedDateChangedEventArgs e)+ OnItemDataBoundHandler(object sender, GridItemEventArgs e)+ Page_Load(object sender, EventArgs e)+ RadGrid_Init(object sender, System.EventArgs e)+ RadGrid_ItemDeleted(object source, GridCommandEventArgs e)+ RadGrid_ItemInserted(object source, GridCommandEventArgs e)+ RadGrid_ItemUpdated(object source, GridCommandEventArgs e)+ RadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)+ RadGrid_PreRender(object sender, EventArgs e)+ txtDiscountRate_TextChanged(object sender, EventArgs e)+ txtPrice_TextChanged(object sender, EventArgs e)+ txtPSupplier_IndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ txtPSupplier_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ txtQuantity_TextChanged(object sender, EventArgs e)
PAReceiptVoucher BAL
Attributes+ _pDalOperations+ CostCalculation(DataTable table, double rate)+ LoadEmptyTable()+ LoadSupplierInfo(DataTable tb, int id)+ TotalCalculation(double GoodsPayment, double Taxpayment, double rate)
PAReceiptVoucher DAL
Attributes+ _adapter+ _conn+ _connStrOperations+ GetEmptyTable(int id)+ Insert(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)+ PAReceiptVoucherDAL()
Detailed design: Class DiagramSSaleInvoiceMng
«interface»
Attributes+ _saleInvoiceBAL+ _tv+ _wlOperations+ bDelete_Click(object sender, EventArgs e)+ Page_Load(object sender, EventArgs e)+ RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)+ RadGrid_ItemCreated(object sender, GridItemEventArgs e)+ SSaleInvoiceMng_Init(object sender, System.EventArgs e)+ SSaleInvoiceMng_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)+ SSaleInvoiceMng_PreRender(object sender, EventArgs e)
SSaleInvoiceMng BAL
Attributes+ _saleInvoiceDALOperations+ Delete(TransactionVouchers tv, WriteLog wl)+ LoadDataTable()
SSaleInvoiceMng DAL
Attributes+ _adapter+ _conn+ _connStr+ _dtOperations+ Delete(TransactionVouchers tv, WriteLog wl)+ LoadDataTable()+ SSaleInvoiceMngDAL()
SESaleInvoice«interface»
Attributes+ _caching+ _intResult+ _saleBAL+ _tableInfoBAL+ _tv+ _wlOperations+ bEdit_Click(object sender, EventArgs e)+ bSave_Click(object sender, EventArgs e)+ CalculateMoney(DataTable dt)+ CbAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbBookNoIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbBookNo_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbDiscountAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbDiscountAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbGoodsIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbGoodsItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbInventoryIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbInventoryItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbPartnerIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbPartnerItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbTaxAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbTaxCodeIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbVoucherIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbVoucher_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ DpPaymentChanged(object sender, EventArgs e)+ GetAccountName(int id)+ GetTranName(int id)+ OnItemDataBoundHandler(object sender, GridItemEventArgs e)+ Page_Load(object sender, EventArgs e)+ pClose_Click(object sender, EventArgs e)+ RadGrid_Init(object sender, System.EventArgs e)+ RadGrid_ItemDeleted(object source, GridCommandEventArgs e)+ RadGrid_ItemInserted(object source, GridCommandEventArgs e)+ RadGrid_ItemUpdated(object source, GridCommandEventArgs e)+ RadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)+ RadGrid_PreRender(object sender, EventArgs e)+ TxtDiscountChanged(object sender, EventArgs e)+ TxtQuantityChanged(object sender, EventArgs e)+ TxtSeDiscountAfterChanged(object sender, EventArgs e)
SESaleInvoice BAL
Attributes+ _saleDALOperations+ EmptyTable()+ GetCostOfGoodsSold(DateTime voucherDate, int id)+ GetSaleInvoice(int id)+ GetSaleInvoiceDetail(int id)+ GetTotalInventory(int id, int inventoryId, DateTime voucherDate)+ LoadListPrice(DateTime voucherDate, int id)+ Update(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)
SESaleInvoice DAL
Attributes+ _adapter+ _conn+ _connStr+ _dtOperations+ EmptyTable()+ GetCostOfGoodsSold(DateTime voucherDate, int id)+ GetSaleInvoice(int id)+ GetSaleInvoiceDetail(int id)+ GetTotalInventory(int id, int inventoryId, DateTime voucherDate)+ LoadListPrice(DateTime voucherDate, int id)+ SESaleInvoiceDAL()+ Update(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)
SASaleInvoice«interface»
Attributes+ _caching+ _intResult+ _saleBAL+ _tableInfoBAL+ _tv+ _wlOperations+ bSave_Click(object sender, EventArgs e)+ CalculateMoney(DataTable dt)+ CbAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbBookNoIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbBookNo_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbDiscountAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbDiscountAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbGoodsIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbGoodsItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbInventoryIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbInventoryItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbPartnerIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbPartnerItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbTaxAccountIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxAccountItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbTaxCodeIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbTaxCodeItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ CbVoucherIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)+ CbVoucher_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)+ DpPaymentChanged(object sender, EventArgs e)+ GetAccountName(int id)+ GetTranName(int id)+ OnItemDataBoundHandler(object sender, GridItemEventArgs e)+ Page_Load(object sender, EventArgs e)+ pClose_Click(object sender, EventArgs e)+ RadGrid_Init(object sender, System.EventArgs e)+ RadGrid_ItemDeleted(object source, GridCommandEventArgs e)+ RadGrid_ItemInserted(object source, GridCommandEventArgs e)+ RadGrid_ItemUpdated(object source, GridCommandEventArgs e)+ RadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)+ RadGrid_PreRender(object sender, EventArgs e)+ TxtDiscountChanged(object sender, EventArgs e)+ TxtQuantityChanged(object sender, EventArgs e)+ TxtSeDiscountAfterChanged(object sender, EventArgs e)
SASaleInvoice BAL
Attributes+ _saleDALOperations+ EmptyTable()+ GetCostOfGoodsSold(DateTime voucherDate, int id)+ GetTotalInventory(int id, int inventoryId, DateTime voucherDate)+ Insert(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)+ LoadListPrice(DateTime voucherDate, int id)
SASaleInvoice DAL
Attributes+ _adapter+ _conn+ _connStr+ _dtOperations+ EmptyTable()+ GetCostOfGoodsSold(DateTime voucherDate, int id)+ GetTotalInventory(int id, int inventoryId, DateTime voucherDate)+ Insert(string tablename, DataTable GADtable, TransactionVouchers tv, WriteLog wl)+ LoadListPrice(DateTime voucherDate, int id)+ SASaleInvoiceDAL()
Detailed design: Sequence Diagram
Database design
Business tables Support tables: Temp table, virtual table… Every table has a primary key named Id which is of type: int not null
identity(1, 1) Max length and null ability strictly follow field definitions UpdateCount column has default data is 0 Every business table will have the trigger to save all the table
changing
Database design We have 6 common columns:
IsActive Recording status of record
RegistedDate Recording date in the first time record is added
RegisterID Recording UserID in the first time record is added
UpdateDate Recording date for the second time update or later
UpdateUserID Recording UserID for the second time update or later
UpdateCount Recording times for updating
Database design
Part 5:Implementation
Technologies
Tools
Coding convention
Code review
Unit test
Security considerations
Technologies
.NET Framework 4SQL Server 2008RadControls for ASP.NET AJAX jQuery
Tools
Visual Studio 2010ResharperSQL PromptTortoiseSVN…..
Coding conventions
Follow general .NET coding conventionse.g. Pascal Casing, Camel Casing…Create specific conventions for the project
Code Review
By technical leadPeer review
Unit Test
Mainly for business access tier & data access tierUsing NUnit
Not done:Create NUnit report
Security considerations
Client side and server side validationNo SQL injectionEncrypt sensitive data:
Password Cookies
Part 6: Testing
Include: Test plan Bug control Test report
Testing phase
Part 6: How to test
Part 6: Bug list template
Test Report
Part 7: Demo & Q&A
Demo - Q&A
LOGO