Imports System
Imports System.Web.UI
Imports Northwind45.BusinessObject
Imports System.Web.Services
Imports System.Collections.Generic
Imports Microsoft.AspNet.FriendlyUrls
 
Namespace Northwind45
    Partial Public Class AddEditProducts
        Inherits System.Web.UI.Page
 
        Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
            If Not IsPostBack Then
 
                DdlSupplierID.DataSource = Suppliers.SelectSuppliersDropDownListData()
                DdlSupplierID.DataBind()
 
                DdlCategoryID.DataSource = Categories.SelectCategoriesDropDownListData()
                DdlCategoryID.DataBind()
 
                Dim queryStrings As IList(Of String) = Request.GetFriendlyUrlSegments()
 
                If queryStrings.Count = 2 Then
                    Dim operation As String = queryStrings(0)
 
                    If operation = "update" Then
                        LblTitle.Text = "Edit Products"
                        BtnUpdateRecord.Visible = True
                        BtnAddRecord.Visible = False
 
                        ' retrieve id(s) to be updated
                        Dim productID As String = queryStrings(1)
 
                        If Not String.IsNullOrEmpty(productID) Then
                            ' retrieve record to be updated
                            Dim objProducts As Products = Northwind45.BusinessObject.Products.SelectByPrimaryKey(Convert.ToInt32(productID))
 
                            If objProducts IsNot Nothing Then
                                TxtProductID.Enabled = False
                                TxtProductID.Text = objProducts.ProductID.ToString()
                                TxtProductName.Text = objProducts.ProductName
                                DdlSupplierID.SelectedValue = objProducts.SupplierID.ToString()
                                DdlCategoryID.SelectedValue = objProducts.CategoryID.ToString()
                                TxtQuantityPerUnit.Text = objProducts.QuantityPerUnit
                                CbxDiscontinued.Checked = objProducts.Discontinued
 
                                If objProducts.UnitPrice IsNot Nothing Then 
                                    TxtUnitPrice.Text = objProducts.UnitPrice.ToString()
                                End If 
 
                                If objProducts.UnitsInStock IsNot Nothing Then 
                                    TxtUnitsInStock.Text = objProducts.UnitsInStock.ToString()
                                End If 
 
                                If objProducts.UnitsOnOrder IsNot Nothing Then 
                                    TxtUnitsOnOrder.Text = objProducts.UnitsOnOrder.ToString()
                                End If 
 
                                If objProducts.ReorderLevel IsNot Nothing Then 
                                    TxtReorderLevel.Text = objProducts.ReorderLevel.ToString()
                                End If 
                            End If
                        End If
                    Else
                        ' add a record
                        PnlPrimaryKey.Visible = False
                        BtnUpdateRecord.Visible = False
                    End If
                End If
            End If
        End Sub
 
        Protected Sub BtnAddRecord_Click(sender As Object, e As EventArgsHandles BtnAddRecord.Click
            AddOrUpdateRecord("add")
        End Sub
 
        Protected Sub BtnUpdateRecord_Click(sender As Object, e As EventArgsHandles BtnUpdateRecord.Click
            AddOrUpdateRecord("update")
        End Sub
 
        Private Sub AddOrUpdateRecord(operation As String)
            If IsValid Then
                Dim objProducts As Products
 
                If operation = "update" Then
                    objProducts = Northwind45.BusinessObject.Products.SelectByPrimaryKey(Convert.ToInt32(TxtProductID.Text))
                Else
                    objProducts = New Products()
                End If
 
                objProducts.ProductName = TxtProductName.Text
                objProducts.Discontinued = CbxDiscontinued.Checked
 
                If String.IsNullOrEmpty(DdlSupplierID.SelectedValue) Then
                    objProducts.SupplierID = Nothing
                Else
                    objProducts.SupplierID = Convert.ToInt32(DdlSupplierID.SelectedValue)
                End If
 
                If String.IsNullOrEmpty(DdlCategoryID.SelectedValue) Then
                    objProducts.CategoryID = Nothing
                Else
                    objProducts.CategoryID = Convert.ToInt32(DdlCategoryID.SelectedValue)
                End If
 
                If String.IsNullOrEmpty(TxtQuantityPerUnit.Text) Then
                    objProducts.QuantityPerUnit = Nothing
                Else
                    objProducts.QuantityPerUnit = TxtQuantityPerUnit.Text
                End If
 
                If String.IsNullOrEmpty(TxtUnitPrice.Text) Then
                    objProducts.UnitPrice = Nothing
                Else
                    objProducts.UnitPrice = Convert.ToDecimal(TxtUnitPrice.Text)
                End If
 
                If String.IsNullOrEmpty(TxtUnitsInStock.Text) Then
                    objProducts.UnitsInStock = Nothing
                Else
                    objProducts.UnitsInStock = Convert.ToInt16(TxtUnitsInStock.Text)
                End If
 
                If String.IsNullOrEmpty(TxtUnitsOnOrder.Text) Then
                    objProducts.UnitsOnOrder = Nothing
                Else
                    objProducts.UnitsOnOrder = Convert.ToInt16(TxtUnitsOnOrder.Text)
                End If
 
                If String.IsNullOrEmpty(TxtReorderLevel.Text) Then
                    objProducts.ReorderLevel = Nothing
                Else
                    objProducts.ReorderLevel = Convert.ToInt16(TxtReorderLevel.Text)
                End If
 
                ' the insert method returns the newly created primary key
                Dim newlyCreatedPrimaryKey As Integer
 
                Dim isNoErrors As Boolean = True
 
                Try
                    If operation = "update" Then
                        objProducts.Update()
                    Else
                        newlyCreatedPrimaryKey = objProducts.Insert()
                    End If
 
                Catch ex As Exception
                    If operation = "update" Then
                        Functions.ShowModalError(ex, Me"An rror occured on item update!")
                    Else
                        Functions.ShowModalError(ex, Me"An error occured on item insertion!")
                    End If
 
                    isNoErrors = False
                End Try
 
                If isNoErrors Then
                    Response.Redirect("~/GridViewProducts")
                End If
            End If
        End Sub
    End Class
End Namespace