动态DataTable-Vb.Net
Partial Public Class SupplierSalesStatsControl
Inherits System.Web.UI.UserControl
Private m_Item As Order
Private m_ItemUser As User
Private m_season As Season
Private m_ItemCustomer As Customer
Private m_ItemDelivery As Delivery
Private m_isHeadOfficeUser As Boolean = False
Private m_userOfficeID As Integer
Private m_UserID As Integer
Private m_UserCategory As User.UserCategories
Private m_SeasonSummary As SeasonSummary
Private m_TotalPieces As Integer = 0I
Private m_hashTableLotsMargin As Hashtable
Private m_hashSupplierCustomer As Hashtable
Private m_hashCustomerOrder As Hashtable
Private m_arrAllDataGrids As New ArrayList
Private m_penaltySupplier As Decimal = 0D
Private m_claimSupplier As Decimal = 0D
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.m_UserID = CType(Context.User.Identity.Name, Integer)
Me.m_isHeadOfficeUser = Garzone.User.isHeadOfficeUser(Me.m_UserID)
Me.m_userOfficeID = Garzone.User.getOfficeID(Me.m_UserID)
If Me.m_ItemUser Is Nothing Then
Me.m_ItemUser = New User(True)
End If
If Me.dropSeason.Items.Count = 0 Then
Me.m_season = New Season
Me.dropSeason.DataSource = Me.m_season.DataSetSeason.Seasons
Me.dropSeason.DataTextField = "Name"
Me.dropSeason.DataValueField = "SeasonID"
Me.dropSeason.DataBind()
Season.selectCurrentSeason(Me.dropSeason, Me.m_season.DataSetSeason.Seasons)
BindData()
End If
End Sub
Private Sub BindData()
If Not Me.dropSeason.SelectedItem Is Nothing Then
Try
Dim _vwOrderRow As OrderDataSet.vw_OrderViewRow
Dim _oneLotRow As OrderDataSet.OrderLotRow
Dim _marginCalculator As Garzone.SaleCalculation
Dim _hashSuppliers As New Hashtable
Me.m_hashSupplierCustomer = New Hashtable
Me.m_hashCustomerOrder = New Hashtable
Dim _tableSuppliers As DataTable
Dim _hastable As Hashtable
Dim _BuyingPrice As Decimal = 0D
Dim _SellingPrice As Decimal = 0D
Dim _ExchangeRatePurchase As Decimal = 1
Dim _ExchangeRateSelling As Decimal = 1
Me.m_Item = New Order
Me.m_Item.fillBySeasonID(CType(Me.dropSeason.SelectedItem.Value, Integer))
Me.m_ItemCustomer = New Customer(True)
Me.m_ItemCustomer.FillAll()
Me.m_ItemDelivery = New Delivery
Me.m_ItemDelivery.fillBySeasonID(CType(Me.dropSeason.SelectedItem.Value, Integer))
'initalize the season summary for all season
m_SeasonSummary = New SeasonSummary
m_SeasonSummary.m_Item = Me.m_Item
m_SeasonSummary.m_ItemDelivery = Me.m_ItemDelivery
m_SeasonSummary.m_OfficeID = Me.m_userOfficeID
Me.m_SeasonSummary.isHeaderOfficeUser = Me.m_isHeadOfficeUser
m_SeasonSummary.CreateSummary()
Me.m_hashTableLotsMargin = New Hashtable
For Each _vwOrderRow In Me.m_Item.DatasetOrder.vw_OrderView
Select Case CType(_vwOrderRow.InternalValidationStatusID, Order.InternalValidationStatus)
Case Order.InternalValidationStatus.Authorized, Order.InternalValidationStatus.Completed, Order.InternalValidationStatus.Inproduction, Order.InternalValidationStatus.ProductionDocumentsReceived
If _hashSuppliers.ContainsKey(_vwOrderRow.SupplierID) = False Then
_hashSuppliers.Add(_vwOrderRow.SupplierID, New ArrayList)
End If
If Me.m_hashCustomerOrder.ContainsKey(_vwOrderRow.CustomerID) = False Then
Me.m_hashCustomerOrder.Add(_vwOrderRow.CustomerID, New ArrayList)
End If
If Me.m_hashSupplierCustomer.ContainsKey(_vwOrderRow.SupplierID) = False Then
Me.m_hashSupplierCustomer.Add(_vwOrderRow.SupplierID, New ArrayList)
End If
For Each _oneLotRow In Me.m_Item.DatasetOrder.Orders.FindByOrderID(_vwOrderRow.OrderID).GetOrderLotRows
_marginCalculator = New Garzone.SaleCalculation
If _oneLotRow.IsFinanceTotalDaysNull = False Then
'Apply finance information to the calculator
_marginCalculator.InterestPeriod = _oneLotRow.FinanceTotalDays
_marginCalculator.InterestRate = _oneLotRow.FinanceInterestRate
End If
If Not _oneLotRow.IsBuyingPriceNull Then
If Not _oneLotRow.IsExchangeRatePurchaseNull Then
_ExchangeRatePurchase = _oneLotRow.ExchangeRatePurchase
End If
_BuyingPrice = _oneLotRow.BuyingPrice * _ExchangeRatePurchase
End If
If Not _oneLotRow.IsSellingPriceNull Then
If Not _oneLotRow.IsExchangeRateSellingNull Then
_ExchangeRateSelling = _oneLotRow.ExchangeRateSelling
End If
_SellingPrice = _oneLotRow.SellingPrice * _ExchangeRateSelling
End If
'Check DataValid
_hastable = New Hashtable()
_hastable = _marginCalculator.CheckIsNullValid(_vwOrderRow)
_marginCalculator.CalculateMargin(CType(_hastable("Sale_BC"), Decimal), CType(_hastable("Sale_SC"), Decimal), CType(_hastable("Sale_SCB"), Decimal), CType(_hastable("Sale_WMC"), Decimal), CType(_hastable("Sale_SVAT"), Decimal), CType(_hastable("Sale_IP"), Decimal), CType(_hastable("Sale_LCB"), Decimal), CType(_hastable("Sale_ICB"), Decimal), CType(_hastable("Sale_OC"), Decimal), CType(_hastable("Purchase_FC"), Decimal), CType(_hastable("Purchase_LCM"), Decimal), CType(_hastable("Purchase_AC"), Decimal), CType(_hastable("Purchase_ICM"), Decimal), CType(_hastable("Purchase_BVAT"), Decimal), CType(_hastable("Purchase_ICP"), Decimal), CType(_hastable("Purchase_ICA"), Decimal), CType(_hastable("Purchase_OCP"), Decimal), CType(_hastable("Purchase_OCA"), Decimal), _BuyingPrice, _SellingPrice, _vwOrderRow.OrderSalesCategory)
Me.m_hashTableLotsMargin.Add(_oneLotRow.OrderLotID, _marginCalculator)
Next
'Add the lot information to the hash table
CType(_hashSuppliers.Item(_vwOrderRow.SupplierID), ArrayList).Add(_vwOrderRow.OrderID)
CType(Me.m_hashCustomerOrder.Item(_vwOrderRow.CustomerID), ArrayList).Add(_vwOrderRow.OrderID)
If CType(Me.m_hashSupplierCustomer.Item(_vwOrderRow.SupplierID), ArrayList).Contains(_vwOrderRow.CustomerID) = False Then
CType(Me.m_hashSupplierCustomer.Item(_vwOrderRow.SupplierID), ArrayList).Add(_vwOrderRow.CustomerID)
End If
End Select
'End If
Next
'Bind Suppier
_tableSuppliers = Me.TransmitHashSupplierTable(_hashSuppliers)
Dim _row As DataRow = _tableSuppliers.NewRow
_row.Item("SupplierID") = -1
_row.Item("SupplierName") = "Summary"
_row.Item("TotalPieces") = Me.m_TotalPieces
_row.Item("Orders") = Me.m_SeasonSummary.TotalOrders
_row.Item("PurchaseAmount") = -Me.m_SeasonSummary.TotalSalesBuy
_row.Item("PurchasePercentage") = 1
_row.Item("Claims") = -Me.m_claimSupplier
_row.Item("Penalty") = Me.m_penaltySupplier
_row.Item("InspectionFail") = Me.m_SeasonSummary.TotalInspectionFailed.ToString & "/" & Me.m_SeasonSummary.TotalInspection.ToString
If Me.m_SeasonSummary.TotalInspection <> 0 Then
_row.Item("FailedP") = Me.m_SeasonSummary.TotalInspectionFailed / Me.m_SeasonSummary.TotalInspection
Else
_row.Item("FailedP") = 0
End If
_row.Item("Delivery") = Me.m_SeasonSummary.AverageDelivery
_row.Item("LowMargin") = Me.m_SeasonSummary.LowMargin
_row.Item("AvgMargin") = Me.m_SeasonSummary.AvgMargin
_row.Item("HighMargin") = Me.m_SeasonSummary.HighMargin
_row.Item("SubTotal") = Me.m_SeasonSummary.SubTotal - Me.m_SeasonSummary.TotalClaim + Me.m_SeasonSummary.TotalPenalty
_row.Item("SubTotalOrdered") = Me.m_SeasonSummary.SubTotalOrdered - Me.m_SeasonSummary.TotalClaim + Me.m_SeasonSummary.TotalPenalty
If Me.m_SeasonSummary.SubTotalOrdered - Me.m_SeasonSummary.TotalClaim + Me.m_SeasonSummary.TotalPenalty = 0 Then
_row.Item("SubTotalCompare") = 0
Else
_row.Item("SubTotalCompare") = (Me.m_SeasonSummary.SubTotal - Me.m_SeasonSummary.TotalClaim + Me.m_SeasonSummary.TotalPenalty) / (Me.m_SeasonSummary.SubTotalOrdered - Me.m_SeasonSummary.TotalClaim + Me.m_SeasonSummary.TotalPenalty)
End If
'If no order detect don't add this summary
If m_SeasonSummary.TotalOrders <> 0 Then
_tableSuppliers.Rows.Add(_row)
End If
_tableSuppliers.DefaultView.Sort = "PurchaseAmount DESC"
Me.gvSupplier.DataSource = _tableSuppliers.DefaultView
Me.gvSupplier.DataBind()
Me.gvSupplier.Visible = Me.gvSupplier.Rows.Count > 0
Catch ex As Exception
Garzone.ExceptionManager.HandleException(ex, "Error on supplier sales season stats for " & Garzone.User.getOfficeName(Me.dropSeason.SelectedItem.Value))
Me.gvSupplier.Visible = False
End Try
End If
End Sub
Private Function GenerateCustomerSalesBySupplierID(ByVal _supplierID As Integer) As DataTable
Dim _dataTable As New DataTable
Dim _row As DataRow
Dim _customerID As Integer
Dim _vwOrderRow As OrderDataSet.vw_OrderViewRow
Dim _vwOrderRows As OrderDataSet.vw_OrderViewRow()
Dim _customerRow As CustomerDataSet.CustomersRow
Dim _oneLotRow As OrderDataSet.OrderLotRow
Dim _oneOrderClaimRow As OrderDataSet.OrderClaimRow
Dim _oneInternalInspection As OrderDataSet.OrdersInternalInspectionsRow
Dim _vwDeliveryRow As DeliveryDataSet.vw_DeliveryShipmentViewRow
Dim _oneOrderInspectionRow As OrderDataSet.OrdersInspectionsRow
Dim _rowOrderLotShipment As DeliveryDataSet.OrderLotShipmentRow
Dim _rowsOrderLotShipment As DeliveryDataSet.OrderLotShipmentRow()
Dim _numOfOrders As New ArrayList
Dim _total As Decimal = 0D
Dim _subTotal As Decimal
Dim _subTotalOrdered As Decimal = 0D
Dim _totalPcs As Integer
Dim _totalNet As Decimal = 0D
Dim _totalBuy As Decimal = 0D
Dim _totalClaims As Decimal = 0D
Dim _claimSupplier As Decimal = 0D
Dim _totalPenalty As Decimal = 0D
Dim _penaltySupplier As Decimal = 0D
Dim _totalInspection As Integer = 0I
Dim _totalInspectionFailed As Integer = 0I
Dim _InspectionFailedPercentage As Decimal
Dim _totalDelivery As Integer = 0I
Dim _averageDelivery As Decimal = 0D
Dim _deliveryContainer As ArrayList
Dim _lowMargin As Decimal = 0D
Dim _currentMargin As Decimal = 0D
Dim _avgMargin As Decimal = 0D
Dim _highMargin As Decimal = 0D
Dim _marginCalculator As Garzone.SaleCalculation
_dataTable.Columns.Add(New DataColumn("CustomerName", GetType(String)))
_dataTable.Columns.Add(New DataColumn("Orders", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("TotalPieces", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("PurchaseAmount", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("PurchasePercentage", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Claims", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Penalty", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("InspectionFail", GetType(String)))
_dataTable.Columns.Add(New DataColumn("FailedP", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Delivery", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("LowMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("AvgMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("HighMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotal", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalOrdered", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalCompare", GetType(Decimal)))
For Each _customerID In Me.m_hashSupplierCustomer.Item(_supplierID)
_total = 0
_subTotal = 0D
_subTotalOrdered = 0D
_totalNet = 0
_totalBuy = 0
_totalClaims = 0
_claimSupplier = 0D
_totalPenalty = 0
_penaltySupplier = 0D
_totalPcs = 0
_totalInspection = 0I
_totalInspectionFailed = 0I
_InspectionFailedPercentage = 0D
_totalDelivery = 0I
_averageDelivery = 0D
_deliveryContainer = New ArrayList
_lowMargin = 0D
_currentMargin = 0D
_avgMargin = 0D
_highMargin = 0D
_numOfOrders = New ArrayList
Dim counter As Integer = 0
Dim _arrMarginContainer As New ArrayList
Dim _totalMargin As Decimal = 0D
_customerRow = Me.m_ItemCustomer.DatasetCustomer.Customers.FindByCustomerID(_customerID)
_vwOrderRows = Me.m_Item.DatasetOrder.vw_OrderView.Select("SupplierID=" & _supplierID.ToString & " and CustomerID=" & _customerID.ToString)
For Each _vwOrderRow In _vwOrderRows
' If Me.m_isHeadOfficeUser = True Or Me.m_userOfficeID = _vwOrderRow.BranchOfficeID Then
Select Case CType(_vwOrderRow.InternalValidationStatusID, Order.InternalValidationStatus)
Case Order.InternalValidationStatus.Authorized, Order.InternalValidationStatus.Completed, Order.InternalValidationStatus.Inproduction, Order.InternalValidationStatus.ProductionDocumentsReceived
For Each _oneLotRow In Me.m_Item.DatasetOrder.Orders.FindByOrderID(_vwOrderRow.OrderID).GetOrderLotRows
If _numOfOrders.Contains(_oneLotRow.OrderID) = False Then
_numOfOrders.Add(_oneLotRow.OrderID)
End If
'Get the calculator already created
_marginCalculator = Me.m_hashTableLotsMargin.Item(_oneLotRow.OrderLotID)
_rowsOrderLotShipment = Me.m_ItemDelivery.DatasetDelivery.OrderLotShipment.Select("OrderLotID=" & _oneLotRow.OrderLotID.ToString)
If _oneLotRow.IsBuyingPriceNull = False Then
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_totalBuy += (_oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
Next
End If
If _oneLotRow.IsSellingPriceNull = False Then
_subTotalOrdered += (_marginCalculator.Margin * _oneLotRow.QuantityOrdered * _oneLotRow.ExchangeRateSelling * _oneLotRow.SellingPrice)
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_total += (_rowOrderLotShipment.QuantityShipped * _oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling)
_totalNet += (_marginCalculator.GrossSalePrice * _rowOrderLotShipment.QuantityShipped)
_subTotal += (_oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling * _rowOrderLotShipment.QuantityShipped * _marginCalculator.Margin)
Next
End If
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_totalPcs += _rowOrderLotShipment.QuantityShipped
Next
'Current margin
If _oneLotRow.SellingPrice <> 0 Then
_currentMargin = _marginCalculator.Margin
Else
_currentMargin = 0D
End If
_arrMarginContainer.Add(_currentMargin)
'Margin Low and high
If counter = 0 Then
_lowMargin = _currentMargin
_highMargin = _currentMargin
End If
_lowMargin = SeasonSummary.PopUpDecimal(_currentMargin, _lowMargin, False)
_highMargin = SeasonSummary.PopUpDecimal(_currentMargin, _highMargin, True)
'Claims calculation
For Each _oneOrderClaimRow In _oneLotRow.GetOrderClaimRows
_totalClaims += (_oneOrderClaimRow.ClaimTotalAmount - _oneOrderClaimRow.VenderAmount)
_claimSupplier += _oneOrderClaimRow.VenderAmount
Next
'Penalty calculation
For Each _rowOrderLotShipment In _rowsOrderLotShipment
If _rowOrderLotShipment.IsMakerPenaltyValueNull = False Then
_totalPenalty += ((_rowOrderLotShipment.MakerPenaltyValue / 100) * _oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
_penaltySupplier += ((_rowOrderLotShipment.MakerPenaltyValue / 100) * _oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
End If
If _rowOrderLotShipment.IsCustomerPenaltyValueNull = False Then
_totalPenalty -= ((_rowOrderLotShipment.CustomerPenaltyValue / 100) * _oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling * _rowOrderLotShipment.QuantityShipped)
End If
Next
'Inspection
'Internal Inspection calculation
For Each _oneInternalInspection In _oneLotRow.GetOrdersInternalInspectionsRows
If _oneInternalInspection.IsInspectionResultIDNull = False Then
Select Case CType(_oneInternalInspection.InspectionResultID, Inspection.InspectionsResults)
Case Inspection.InspectionsResults.Failed
_totalInspectionFailed += 1
End Select
End If
Next
_totalInspection += _oneLotRow.GetOrdersInternalInspectionsRows.Length
'Third party inspections calculation
For Each _oneOrderInspectionRow In _oneLotRow.GetOrdersInspectionsRows
If _oneOrderInspectionRow.IsResultIDNull = False Then
Select Case CType(_oneOrderInspectionRow.ResultID, Inspection.InspectionsResults)
Case Inspection.InspectionsResults.Failed
_totalInspectionFailed += 1
End Select
End If
Next
_totalInspection += _oneLotRow.GetOrdersInspectionsRows.Length
'Increase the counter
counter += 1
Next
'Calculate Delivery
For Each _vwDeliveryRow In Me.m_ItemDelivery.DatasetDelivery.vw_DeliveryShipmentView.Select("OrderID=" & _vwOrderRow.OrderID.ToString)
If Not _vwDeliveryRow.IsDeliveryNull Then
_deliveryContainer.Add(_vwDeliveryRow.Delivery)
End If
Next
End Select
'End If
Next
If _total <> 0 Then
_avgMargin = (_totalNet - _totalBuy) / _total
Else
_avgMargin = 0D
End If
'Inspection failed
If _totalInspection <> 0 Then
_InspectionFailedPercentage = _totalInspectionFailed / _totalInspection
Else
_InspectionFailedPercentage = 0
End If
'Delivery
For Each _oneDelivery As Integer In _deliveryContainer
_totalDelivery += _oneDelivery
Next
If _deliveryContainer.Count = 0 Then
_averageDelivery = 0D
Else
_averageDelivery = _totalDelivery / _deliveryContainer.Count
End If
'Create one row for current customer
_row = _dataTable.NewRow
_row.Item("CustomerName") = _customerRow.Name
_row.Item("Orders") = _numOfOrders.Count
_row.Item("TotalPieces") = _totalPcs
_row.Item("PurchaseAmount") = -_totalBuy
If Me.m_SeasonSummary.TotalSalesBuy <> 0 Then
_row.Item("PurchasePercentage") = (_totalBuy / Me.m_SeasonSummary.TotalSalesBuy)
Else
_row.Item("PurchasePercentage") = 0
End If
_row.Item("Claims") = -_claimSupplier
_row.Item("Penalty") = _penaltySupplier
_row.Item("InspectionFail") = _totalInspectionFailed.ToString & "/" & _totalInspection.ToString
_row.Item("FailedP") = _InspectionFailedPercentage
_row.Item("Delivery") = _averageDelivery
_row.Item("LowMargin") = _lowMargin
_row.Item("AvgMargin") = _avgMargin
_row.Item("HighMargin") = _highMargin
_row.Item("SubTotal") = _subTotal - _totalClaims + _totalPenalty
_row.Item("SubTotalOrdered") = _subTotalOrdered - _totalClaims + _totalPenalty
If _subTotalOrdered - _totalClaims + _totalPenalty = 0 Then
_row.Item("SubTotalCompare") = 0
Else
_row.Item("SubTotalCompare") = (_subTotal - _totalClaims + _totalPenalty) / (_subTotalOrdered - _totalClaims + _totalPenalty)
End If
If _numOfOrders.Count > 0 Then
_dataTable.Rows.Add(_row)
End If
Next
Return _dataTable
End Function
Private Function TransmitHashSupplierTable(ByVal _hashTable As Hashtable) As DataTable
Dim _dataTable As New DataTable
Dim _item As DictionaryEntry
Dim _row As DataRow
Dim _supplierRow As OrderDataSet.SuppliersRow
Dim _oneLotRow As OrderDataSet.OrderLotRow
Dim _oneOrderClaimRow As OrderDataSet.OrderClaimRow
Dim _oneInternalInspection As OrderDataSet.OrdersInternalInspectionsRow
Dim _vwDeliveryRow As DeliveryDataSet.vw_DeliveryShipmentViewRow
Dim _oneOrderInspectionRow As OrderDataSet.OrdersInspectionsRow
Dim _rowOrderLotShipment As DeliveryDataSet.OrderLotShipmentRow
Dim _rowsOrderLotShipment As DeliveryDataSet.OrderLotShipmentRow()
Dim _numOfOrders As New ArrayList
Dim _total As Decimal = 0D
Dim _subTotal As Decimal = 0D
Dim _subTotalOrdered As Decimal = 0D
Dim _totalPieces As Integer = 0I
Dim _totalNet As Decimal = 0D
Dim _totalBuy As Decimal = 0D
Dim _totalClaims As Decimal = 0D
Dim _claimSupplier As Decimal = 0D
Dim _totalPenalty As Decimal = 0D
Dim _penaltySupplier As Decimal = 0D
Dim _totalInspection As Integer = 0I
Dim _totalInspectionFailed As Integer = 0I
Dim _InspectionFailedPercentage As Decimal
Dim _totalDelivery As Integer = 0I
Dim _averageDelivery As Decimal = 0D
Dim _deliveryContainer As ArrayList
Dim _lowMargin As Decimal = 0D
Dim _currentMargin As Decimal = 0D
Dim _avgMargin As Decimal = 0D
Dim _highMargin As Decimal = 0D
Dim _marginCalculator As Garzone.SaleCalculation
_dataTable.Columns.Add(New DataColumn("SupplierID", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("SupplierName", GetType(String)))
_dataTable.Columns.Add(New DataColumn("Orders", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("TotalPieces", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("PurchaseAmount", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("PurchasePercentage", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Claims", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Penalty", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("InspectionFail", GetType(String)))
_dataTable.Columns.Add(New DataColumn("FailedP", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Delivery", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("LowMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("AvgMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("HighMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotal", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalOrdered", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalCompare", GetType(Decimal)))
For Each _item In _hashTable
_total = 0
_totalPieces = 0
_totalNet = 0
_subTotal = 0D
_subTotalOrdered = 0D
_totalBuy = 0D
_totalClaims = 0D
_claimSupplier = 0D
_totalPenalty = 0D
_penaltySupplier = 0D
_totalInspection = 0I
_totalInspectionFailed = 0I
_InspectionFailedPercentage = 0D
_totalDelivery = 0I
_averageDelivery = 0D
_deliveryContainer = New ArrayList
_lowMargin = 0D
_currentMargin = 0D
_avgMargin = 0D
_highMargin = 0D
_numOfOrders = New ArrayList
Dim counter As Integer = 0
Dim _arrMarginContainer As New ArrayList
Dim _totalMargin As Decimal = 0D
_supplierRow = Me.m_Item.DatasetOrder.Suppliers.FindBySupplierID(CType(_item.Key, Integer))
For Each _oneOrderID As Integer In CType(_item.Value, ArrayList)
For Each _oneLotRow In Me.m_Item.DatasetOrder.Orders.FindByOrderID(_oneOrderID).GetOrderLotRows
If _numOfOrders.Contains(_oneLotRow.OrderID) = False Then
_numOfOrders.Add(_oneLotRow.OrderID)
End If
'Get the calculator already created
_marginCalculator = Me.m_hashTableLotsMargin.Item(_oneLotRow.OrderLotID)
_rowsOrderLotShipment = Me.m_ItemDelivery.DatasetDelivery.OrderLotShipment.Select("OrderLotID=" & _oneLotRow.OrderLotID.ToString)
If _oneLotRow.IsSellingPriceNull = False Then
_subTotalOrdered += _marginCalculator.Margin * _oneLotRow.QuantityOrdered * _oneLotRow.ExchangeRateSelling * _oneLotRow.SellingPrice
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_total += (_oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling * _rowOrderLotShipment.QuantityShipped)
_totalNet += (_marginCalculator.GrossSalePrice * _rowOrderLotShipment.QuantityShipped)
_subTotal += (_oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling * _rowOrderLotShipment.QuantityShipped * _marginCalculator.Margin)
Next
End If
If _oneLotRow.IsBuyingPriceNull = False Then
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_totalBuy += (_oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
Next
End If
For Each _rowOrderLotShipment In _rowsOrderLotShipment
_totalPieces += _rowOrderLotShipment.QuantityShipped
Me.m_TotalPieces += _rowOrderLotShipment.QuantityShipped
Next
'Current margin
If _oneLotRow.SellingPrice <> 0 Then
_currentMargin = _marginCalculator.Margin
Else
_currentMargin = 0D
End If
_arrMarginContainer.Add(_currentMargin)
'Margin Low and high
If counter = 0 Then
_lowMargin = _currentMargin
_highMargin = _currentMargin
End If
_lowMargin = SeasonSummary.PopUpDecimal(_currentMargin, _lowMargin, False)
_highMargin = SeasonSummary.PopUpDecimal(_currentMargin, _highMargin, True)
'Claims calculation
For Each _oneOrderClaimRow In _oneLotRow.GetOrderClaimRows
_totalClaims += (_oneOrderClaimRow.ClaimTotalAmount - _oneOrderClaimRow.VenderAmount)
_claimSupplier += _oneOrderClaimRow.VenderAmount
Me.m_claimSupplier += _oneOrderClaimRow.VenderAmount
Next
'Internal Inspection calculation
For Each _oneInternalInspection In _oneLotRow.GetOrdersInternalInspectionsRows
If _oneInternalInspection.IsInspectionResultIDNull = False Then
Select Case CType(_oneInternalInspection.InspectionResultID, Inspection.InspectionsResults)
Case Inspection.InspectionsResults.Failed
_totalInspectionFailed += 1
End Select
End If
Next
_totalInspection += _oneLotRow.GetOrdersInternalInspectionsRows.Length
'Third party inspections calculation
For Each _oneOrderInspectionRow In _oneLotRow.GetOrdersInspectionsRows
If _oneOrderInspectionRow.IsResultIDNull = False Then
Select Case CType(_oneOrderInspectionRow.ResultID, Inspection.InspectionsResults)
Case Inspection.InspectionsResults.Failed
_totalInspectionFailed += 1
End Select
End If
Next
_totalInspection += _oneLotRow.GetOrdersInspectionsRows.Length
'Penalty calculation
For Each _rowOrderLotShipment In Me.m_ItemDelivery.DatasetDelivery.OrderLotShipment.Select("OrderLotID=" & _oneLotRow.OrderLotID.ToString)
If _rowOrderLotShipment.IsMakerPenaltyValueNull = False Then
_totalPenalty += ((_rowOrderLotShipment.MakerPenaltyValue / 100) * _oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
_penaltySupplier += ((_rowOrderLotShipment.MakerPenaltyValue / 100) * _oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
Me.m_penaltySupplier += ((_rowOrderLotShipment.MakerPenaltyValue / 100) * _oneLotRow.BuyingPrice * _oneLotRow.ExchangeRatePurchase * _rowOrderLotShipment.QuantityShipped)
End If
If _rowOrderLotShipment.IsCustomerPenaltyValueNull = False Then
_totalPenalty -= ((_rowOrderLotShipment.CustomerPenaltyValue / 100) * _oneLotRow.SellingPrice * _oneLotRow.ExchangeRateSelling * _rowOrderLotShipment.QuantityShipped)
End If
Next
'Calculate Delivery
For Each _vwDeliveryRow In Me.m_ItemDelivery.DatasetDelivery.vw_DeliveryShipmentView.Select("OrderLotID=" & _oneLotRow.OrderLotID.ToString)
If Not _vwDeliveryRow.IsDeliveryNull Then
_deliveryContainer.Add(_vwDeliveryRow.Delivery)
End If
Next
counter += 1
Next
Next
Me.m_SeasonSummary.TotalOrders += _numOfOrders.Count
If _total <> 0 Then
_avgMargin = (_totalNet - _totalBuy) / _total
Else
_avgMargin = 0D
End If
'Inspection failed
If _totalInspection <> 0 Then
_InspectionFailedPercentage = _totalInspectionFailed / _totalInspection
Else
_InspectionFailedPercentage = 0
End If
'Delivery
For Each _oneDelivery As Integer In _deliveryContainer
_totalDelivery += _oneDelivery
Next
If _deliveryContainer.Count = 0 Then
_averageDelivery = 0D
Else
_averageDelivery = _totalDelivery / _deliveryContainer.Count
End If
'Create one row for current customer
_row = _dataTable.NewRow
_row.Item("SupplierID") = _supplierRow.SupplierID
_row.Item("SupplierName") = _supplierRow.Name
_row.Item("TotalPieces") = _totalPieces
_row.Item("Orders") = _numOfOrders.Count
_row.Item("PurchaseAmount") = -_totalBuy
If Me.m_SeasonSummary.TotalSalesBuy <> 0 Then
_row.Item("PurchasePercentage") = (_totalBuy / Me.m_SeasonSummary.TotalSalesBuy)
Else
_row.Item("PurchasePercentage") = 0
End If
_row.Item("Claims") = -_claimSupplier
_row.Item("Penalty") = _penaltySupplier
_row.Item("InspectionFail") = _totalInspectionFailed.ToString & "/" & _totalInspection.ToString
_row.Item("FailedP") = _InspectionFailedPercentage
_row.Item("Delivery") = _averageDelivery
_row.Item("LowMargin") = _lowMargin
_row.Item("AvgMargin") = _avgMargin
_row.Item("HighMargin") = _highMargin
_row.Item("SubTotal") = _subTotal - _totalClaims + _totalPenalty
_row.Item("SubTotalOrdered") = _subTotalOrdered - _totalClaims + _totalPenalty
If _subTotalOrdered - _totalClaims + _totalPenalty = 0 Then
_row.Item("SubTotalCompare") = 0
Else
_row.Item("SubTotalCompare") = (_subTotal - _totalClaims + _totalPenalty) / (_subTotalOrdered - _totalClaims + _totalPenalty)
End If
_dataTable.Rows.Add(_row)
Next
Return _dataTable
End Function
Private Sub cmdRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdRefresh.Click
BindData()
End Sub
Public Sub ExportAll(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
Dim _fileName As String
_fileName = "Supplier sales stats by customer[" & Me.dropSeason.SelectedItem.Value & "]" & DateTime.Now.ToShortDateString & ".xls"
'Binding data first
BindData()
SeasonSummary.exportExcelFile(Me.m_arrAllDataGrids, _fileName, Me.Response)
End Sub
Private Sub gvSupplier_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvSupplier.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim _dataTable As New DataTable
Dim _row As DataRow
Dim _dtgCustomers As DataGrid = e.Row.FindControl("dtgCustomers")
Dim _supplierID As Integer = CType(e.Row.DataItem("SupplierID"), Integer)
Dim _lblSupplierName As Label = CType(e.Row.FindControl("lblSupplierName"), Label)
_lblSupplierName.Text = CType(e.Row.DataItem("SupplierName"), String)
If _supplierID <> -1 Then
'Normal row
_dataTable = Me.GenerateCustomerSalesBySupplierID(_supplierID)
_dtgCustomers.Attributes.Add("Name", e.Row.DataItem("SupplierName"))
_row = _dataTable.NewRow
_row.Item("CustomerName") = "Total"
_row.Item("Orders") = CType(e.Row.DataItem("Orders"), Integer)
_row.Item("TotalPieces") = CType(e.Row.DataItem("TotalPieces"), Integer)
_row.Item("PurchaseAmount") = CType(e.Row.DataItem("PurchaseAmount"), Decimal)
_row.Item("PurchasePercentage") = CType(e.Row.DataItem("PurchasePercentage"), Decimal)
_row.Item("Claims") = CType(e.Row.DataItem("Claims"), Decimal)
_row.Item("Penalty") = CType(e.Row.DataItem("Penalty"), Decimal)
_row.Item("InspectionFail") = CType(e.Row.DataItem("InspectionFail"), String)
_row.Item("FailedP") = CType(e.Row.DataItem("FailedP"), Decimal)
_row.Item("Delivery") = CType(e.Row.DataItem("Delivery"), Integer)
_row.Item("LowMargin") = CType(e.Row.DataItem("LowMargin"), Decimal)
_row.Item("AvgMargin") = CType(e.Row.DataItem("AvgMargin"), Decimal)
_row.Item("HighMargin") = CType(e.Row.DataItem("HighMargin"), Decimal)
_row.Item("SubTotal") = CType(e.Row.DataItem("SubTotal"), Decimal)
_row.Item("SubTotalOrdered") = CType(e.Row.DataItem("SubTotalOrdered"), Decimal)
_row.Item("SubTotalCompare") = CType(e.Row.DataItem("SubTotalCompare"), Decimal)
_dataTable.Rows.Add(_row)
_dataTable.DefaultView.Sort = "PurchaseAmount DESC"
_dtgCustomers.DataSource = _dataTable.DefaultView
_dtgCustomers.DataBind()
Else
'Summary row
If CType(e.Row.DataItem("Orders"), Integer) <> 0 Then
_dataTable.Columns.Add(New DataColumn("CustomerName", GetType(String)))
_dataTable.Columns.Add(New DataColumn("Orders", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("TotalPieces", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("PurchaseAmount", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("PurchasePercentage", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Claims", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Penalty", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("InspectionFail", GetType(String)))
_dataTable.Columns.Add(New DataColumn("FailedP", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("Delivery", GetType(Integer)))
_dataTable.Columns.Add(New DataColumn("LowMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("AvgMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("HighMargin", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotal", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalOrdered", GetType(Decimal)))
_dataTable.Columns.Add(New DataColumn("SubTotalCompare", GetType(Decimal)))
'Create one row for current customer
_row = _dataTable.NewRow
_row.Item("CustomerName") = "Total"
_row.Item("Orders") = CType(e.Row.DataItem("Orders"), Integer)
_row.Item("TotalPieces") = CType(e.Row.DataItem("TotalPieces"), Integer)
_row.Item("PurchaseAmount") = CType(e.Row.DataItem("PurchaseAmount"), Decimal)
_row.Item("PurchasePercentage") = CType(e.Row.DataItem("PurchasePercentage"), Decimal)
_row.Item("Claims") = CType(e.Row.DataItem("Claims"), Decimal)
_row.Item("Penalty") = CType(e.Row.DataItem("Penalty"), Decimal)
_row.Item("InspectionFail") = CType(e.Row.DataItem("InspectionFail"), String)
_row.Item("FailedP") = CType(e.Row.DataItem("FailedP"), Decimal)
_row.Item("Delivery") = CType(e.Row.DataItem("Delivery"), Integer)
_row.Item("LowMargin") = CType(e.Row.DataItem("LowMargin"), Decimal)
_row.Item("AvgMargin") = CType(e.Row.DataItem("AvgMargin"), Decimal)
_row.Item("HighMargin") = CType(e.Row.DataItem("HighMargin"), Decimal)
_row.Item("SubTotal") = CType(e.Row.DataItem("SubTotal"), Decimal)
_row.Item("SubTotalOrdered") = CType(e.Row.DataItem("SubTotalOrdered"), Decimal)
_row.Item("SubTotalCompare") = CType(e.Row.DataItem("SubTotalCompare"), Decimal)
_dataTable.Rows.Add(_row)
_dataTable.DefaultView.Sort = "PurchaseAmount DESC"
_dtgCustomers.DataSource = _dataTable.DefaultView
_dtgCustomers.Attributes.Add("Name", "Summary")
_dtgCustomers.DataBind()
End If
End If
'Add to arraylist to use in future
Me.m_arrAllDataGrids.Add(_dtgCustomers)
End If
End Sub
End Class