<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Farchive%2Fcode%2FVBA%2FclsPackageItem</id>
	<title>VbzCart/archive/code/VBA/clsPackageItem - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Farchive%2Fcode%2FVBA%2FclsPackageItem"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;action=history"/>
	<updated>2026-08-23T12:35:34Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=28618&amp;oldid=prev</id>
		<title>Woozle at 12:48, 14 October 2022</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=28618&amp;oldid=prev"/>
		<updated>2022-10-14T12:48:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:48, 14 October 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;VB&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight lang=&lt;/ins&gt;VB&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039; CLASS: clsPackageItem&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039; CLASS: clsPackageItem&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l441&quot;&gt;Line 441:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 441:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     End With&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     End With&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;VB&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=20368&amp;oldid=prev</id>
		<title>Woozle: Woozle moved page VbzCart/code/VBA/clsPackageItem to VbzCart/archive/code/VBA/clsPackageItem</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=20368&amp;oldid=prev"/>
		<updated>2014-12-19T02:08:58Z</updated>

		<summary type="html">&lt;p&gt;Woozle moved page &lt;a href=&quot;/mw/index.php?title=VbzCart/code/VBA/clsPackageItem&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;VbzCart/code/VBA/clsPackageItem (page does not exist)&quot;&gt;VbzCart/code/VBA/clsPackageItem&lt;/a&gt; to &lt;a href=&quot;/VbzCart/archive/code/VBA/clsPackageItem&quot; title=&quot;VbzCart/archive/code/VBA/clsPackageItem&quot;&gt;VbzCart/archive/code/VBA/clsPackageItem&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:08, 19 December 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=19995&amp;oldid=prev</id>
		<title>Woozle: Created page with &quot;&lt;VB&gt; &#039; CLASS: clsPackageItem  Option Compare Database Option Explicit Private vID As Long Private vPkg As Long Private vItem As Long Private vOrdItem As Long Private vQtyShipp...&quot;</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/VBA/clsPackageItem&amp;diff=19995&amp;oldid=prev"/>
		<updated>2014-05-08T00:48:07Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;VB&amp;gt; &amp;#039; CLASS: clsPackageItem  Option Compare Database Option Explicit Private vID As Long Private vPkg As Long Private vItem As Long Private vOrdItem As Long Private vQtyShipp...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;VB&amp;gt;&lt;br /&gt;
&amp;#039; CLASS: clsPackageItem&lt;br /&gt;
&lt;br /&gt;
Option Compare Database&lt;br /&gt;
Option Explicit&lt;br /&gt;
Private vID As Long&lt;br /&gt;
Private vPkg As Long&lt;br /&gt;
Private vItem As Long&lt;br /&gt;
Private vOrdItem As Long&lt;br /&gt;
Private vQtyShipped As Long &amp;#039; qty shipped as ordered&lt;br /&gt;
Private vQtyExtra As Long   &amp;#039; qty shipped unrequested&lt;br /&gt;
Private vQtyNotAvail As Variant&lt;br /&gt;
Private vQtyCancelled As Variant&lt;br /&gt;
Public Sub Init(iFields As Fields)&lt;br /&gt;
    With iFields&lt;br /&gt;
        vID = !ID&lt;br /&gt;
        vPkg = !ID_Package&lt;br /&gt;
        vItem = Nz(!ID_Item)&lt;br /&gt;
        vOrdItem = Nz(!ID_OrderItem)&lt;br /&gt;
        vQtyShipped = Nz(!QtyShipped)&lt;br /&gt;
        vQtyExtra = Nz(!QtyExtra)&lt;br /&gt;
        vQtyNotAvail = !QtyNotAvail&lt;br /&gt;
        vQtyCancelled = !QtyCancelled&lt;br /&gt;
    End With&lt;br /&gt;
End Sub&lt;br /&gt;
Public Sub InitNew(iParent As clsPackage)&lt;br /&gt;
&amp;#039; ACTION: creates a new line item for the given package&lt;br /&gt;
&amp;#039; ASSUMES: no fields have been filled in beforehand; must be saved explicitly afterwards if those fields are to be written to the db&lt;br /&gt;
    vPkg = iParent.ID&lt;br /&gt;
    With clsPackageItems&lt;br /&gt;
        .DataOpen&lt;br /&gt;
        With .Data&lt;br /&gt;
            .AddNew&lt;br /&gt;
            vID = !ID&lt;br /&gt;
            !ID_Package = vPkg&lt;br /&gt;
            .Update&lt;br /&gt;
        End With&lt;br /&gt;
        .DataShut&lt;br /&gt;
    End With&lt;br /&gt;
End Sub&lt;br /&gt;
Public Sub CopyOrderItem(iData As clsOrderItem)&lt;br /&gt;
&amp;#039; ACTION: fills in the appropriate data in this object with information from the given order item&lt;br /&gt;
&amp;#039; USAGE: used for creating a new package from an order&lt;br /&gt;
    With iData&lt;br /&gt;
        &amp;#039; get the item to be shipped, and the order item it&amp;#039;s shipping from&lt;br /&gt;
        Me.Item_ID = .Item_ID&lt;br /&gt;
        Me.OrderItem_ID = .ID&lt;br /&gt;
&amp;#039; (2004-01-16) we used to assume everything would ship; now we check stock first.&lt;br /&gt;
&amp;#039;        &amp;#039; assume we&amp;#039;ll be shipping everything not nailed down... I mean, not already accounted for&lt;br /&gt;
&amp;#039;        Me.QtyShipped = .QtyOrd - .QtyDone&lt;br /&gt;
        &amp;#039; other quantities default to NULL&lt;br /&gt;
    End With&lt;br /&gt;
    Me.Save&lt;br /&gt;
End Sub&lt;br /&gt;
Public Sub Ship()&lt;br /&gt;
&amp;#039; ACTION: ships this item. This used to involve adjusting a quantity in the Order Item record, but for now it does nothing.&lt;br /&gt;
&amp;#039;   If there is no corresponding order item, does nothing too.&lt;br /&gt;
&amp;#039;    Dim objOrdItm As clsOrderItem&lt;br /&gt;
    &lt;br /&gt;
&amp;#039;    If Me.OrderItemExists Then&lt;br /&gt;
&amp;#039;        Set objOrdItm = Me.OrderItem&lt;br /&gt;
&amp;#039;        With objOrdItm&lt;br /&gt;
&amp;#039;            .QtyDoneAdd Me.QtyHandled + Me.QtyNotAvail + Me.QtyCancelled&lt;br /&gt;
&amp;#039;            .Save&lt;br /&gt;
&amp;#039;        End With&lt;br /&gt;
&amp;#039;    End If&lt;br /&gt;
End Sub&lt;br /&gt;
Public Sub UnShip()&lt;br /&gt;
&amp;#039; ACTION: UNships this item, i.e. reverses the action of Ship()&lt;br /&gt;
&amp;#039;   If there is no corresponding order item, does nothing&lt;br /&gt;
&amp;#039;    Dim objOrdItm As clsOrderItem&lt;br /&gt;
&amp;#039;&lt;br /&gt;
&amp;#039;    If Me.OrderItemExists Then&lt;br /&gt;
&amp;#039;        Set objOrdItm = Me.OrderItem&lt;br /&gt;
&amp;#039;        With objOrdItm&lt;br /&gt;
&amp;#039;            .QtyDoneDel Me.QtyHandled + Me.QtyNotAvail + Me.QtyCancelled&lt;br /&gt;
&amp;#039;            .Save&lt;br /&gt;
&amp;#039;        End With&lt;br /&gt;
&amp;#039;    End If&lt;br /&gt;
End Sub&lt;br /&gt;
Public Function Delete() As Boolean&lt;br /&gt;
    With clsPackageItems&lt;br /&gt;
        .DataOpen&lt;br /&gt;
        If Located Then&lt;br /&gt;
            .Data.Delete&lt;br /&gt;
            Delete = True&lt;br /&gt;
        Else&lt;br /&gt;
            Delete = False&lt;br /&gt;
        End If&lt;br /&gt;
    End With&lt;br /&gt;
End Function&lt;br /&gt;
Public Sub Save()&lt;br /&gt;
    With clsPackageItems&lt;br /&gt;
        .DataOpen&lt;br /&gt;
        If Located Then&lt;br /&gt;
            With .Data&lt;br /&gt;
                .Edit&lt;br /&gt;
                !ID_Package = vPkg&lt;br /&gt;
                !ID_Item = vItem&lt;br /&gt;
                !ID_OrderItem = IIf(vOrdItem = 0, Null, vOrdItem)&lt;br /&gt;
                !QtyShipped = vQtyShipped&lt;br /&gt;
                !QtyExtra = vQtyExtra&lt;br /&gt;
                !QtyNotAvail = vQtyNotAvail&lt;br /&gt;
                !QtyCancelled = vQtyCancelled&lt;br /&gt;
                .Update&lt;br /&gt;
            End With&lt;br /&gt;
        End If&lt;br /&gt;
    End With&lt;br /&gt;
End Sub&lt;br /&gt;
Public Property Get ID() As Long&lt;br /&gt;
    ID = vID&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get Package_ID() As Long&lt;br /&gt;
    Package_ID = vPkg&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get PackageExists() As Boolean&lt;br /&gt;
    PackageExists = (vPkg &amp;lt;&amp;gt; 0)&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get Package() As clsPackage&lt;br /&gt;
    Dim objPkg As clsPackage&lt;br /&gt;
&lt;br /&gt;
    Set objPkg = clsPackages.Item(Me.Package_ID)&lt;br /&gt;
    If objPkg Is Nothing Then&lt;br /&gt;
        With clsPackages&lt;br /&gt;
            .DataOpen&lt;br /&gt;
            .Data.Requery&lt;br /&gt;
            Set objPkg = .Item(Me.Package_ID)&lt;br /&gt;
            .DataShut&lt;br /&gt;
        End With&lt;br /&gt;
    End If&lt;br /&gt;
    Set Package = objPkg&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get Item_ID() As Long&lt;br /&gt;
    Item_ID = vItem&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Let Item_ID(iID As Long)&lt;br /&gt;
    vItem = iID&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get Item() As clsItem&lt;br /&gt;
    Set Item = clsItems.Item(Me.Item_ID)&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get OrderItem_ID() As Long&lt;br /&gt;
    OrderItem_ID = vOrdItem&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Let OrderItem_ID(iID As Long)&lt;br /&gt;
    vOrdItem = iID&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get OrderItem() As clsOrderItem&lt;br /&gt;
    Set OrderItem = clsOrderItems.Item(vOrdItem)&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get OrderItemExists() As Boolean&lt;br /&gt;
    If (Me.OrderItem_ID = 0) Then&lt;br /&gt;
        OrderItemExists = False&lt;br /&gt;
    Else&lt;br /&gt;
        OrderItemExists = Not (Me.OrderItem Is Nothing)&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyShipped() As Long&lt;br /&gt;
    QtyShipped = vQtyShipped&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Let QtyShipped(iQty As Long)&lt;br /&gt;
    vQtyShipped = iQty&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyMoved() As Long&lt;br /&gt;
&amp;#039; RETURNS: quantity shipped + quantity extra&lt;br /&gt;
    QtyMoved = vQtyShipped + vQtyExtra&lt;br /&gt;
End Property&lt;br /&gt;
Public Sub AddQtyShipped(iQty As Long)&lt;br /&gt;
    vQtyShipped = vQtyShipped + iQty&lt;br /&gt;
End Sub&lt;br /&gt;
Public Property Get QtyNotAvail() As Long&lt;br /&gt;
    QtyNotAvail = Nz(vQtyNotAvail)&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Let QtyNotAvail(iQty As Long)&lt;br /&gt;
    vQtyNotAvail = iQty&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyCancelled() As Long&lt;br /&gt;
    QtyCancelled = Nz(vQtyCancelled)&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Let QtyCancelled(iQty As Long)&lt;br /&gt;
    vQtyCancelled = iQty&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyCancelledEver() As Long&lt;br /&gt;
&amp;#039; ACTION: returns the total cancelled of this item for all packages started prior to this one&lt;br /&gt;
    Dim objList As Scripting.Dictionary&lt;br /&gt;
    Dim objItem As clsPackageItem&lt;br /&gt;
    Dim dtStart As Date, dtItem As Date&lt;br /&gt;
    Dim didFinish As Boolean&lt;br /&gt;
    Dim doCount As Boolean&lt;br /&gt;
    Dim qtyTot As Long&lt;br /&gt;
    &lt;br /&gt;
    Set objList = Me.Packings&lt;br /&gt;
    With Me.Package&lt;br /&gt;
        didFinish = .HasBeenFinished&lt;br /&gt;
        If didFinish Then&lt;br /&gt;
            dtStart = .WhenFinished&lt;br /&gt;
        End If&lt;br /&gt;
    End With&lt;br /&gt;
&lt;br /&gt;
    If objList Is Nothing Then&lt;br /&gt;
        QtyCancelledEver = 0&lt;br /&gt;
    Else&lt;br /&gt;
        For Each objItem In objList&lt;br /&gt;
            With objItem&lt;br /&gt;
                dtItem = .Package.WhenStarted&lt;br /&gt;
                If didFinish Then&lt;br /&gt;
                    doCount = (dtItem &amp;lt; dtStart)&lt;br /&gt;
                Else&lt;br /&gt;
                    doCount = False&lt;br /&gt;
                End If&lt;br /&gt;
                If doCount Then&lt;br /&gt;
                    qtyTot = qtyTot + .QtyCancelled&lt;br /&gt;
                End If&lt;br /&gt;
            End With&lt;br /&gt;
        Next objItem&lt;br /&gt;
        QtyCancelledEver = qtyTot&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyHandled() As Long&lt;br /&gt;
    QtyHandled = QtyShipped + QtyNotAvail + QtyCancelled&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyOpen() As Long&lt;br /&gt;
    With Me.OrderItem&lt;br /&gt;
        QtyOpen = .QtyRem&lt;br /&gt;
    End With&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyOrdered() As Long&lt;br /&gt;
&amp;#039; ACTION: returns the quantity originally ordered for the current item&lt;br /&gt;
    With Me.OrderItem&lt;br /&gt;
        QtyOrdered = .QtyOrd&lt;br /&gt;
    End With&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get QtyYetToPack() As Long&lt;br /&gt;
&amp;#039; ACTION: returns the quantity not packed earlier than this package&amp;#039;s creation date&lt;br /&gt;
&amp;#039; STEPS:&lt;br /&gt;
&amp;#039;   1. get all package items referring to the same Order Item&lt;br /&gt;
&amp;#039;   2. total the ones whose package is dated earlier than this package&lt;br /&gt;
&amp;#039;   3. subtract from the total ordered; return this result.&lt;br /&gt;
    Dim objPkg As clsPackage&lt;br /&gt;
    Dim dtStart As Date, dtItem As Date&lt;br /&gt;
    Dim objList As Scripting.Dictionary&lt;br /&gt;
    Dim objItem As clsPackageItem&lt;br /&gt;
    Dim qtyPkd As Long&lt;br /&gt;
    &lt;br /&gt;
    Set objPkg = Me.Package&lt;br /&gt;
    If objPkg Is Nothing Then&lt;br /&gt;
        QtyYetToPack = 0&lt;br /&gt;
        Debug.Print &amp;quot;Package object not returned for ID=&amp;quot; &amp;amp; Me.Package_ID&lt;br /&gt;
    Else&lt;br /&gt;
        dtStart = objPkg.WhenStarted&lt;br /&gt;
        Set objList = Me.Packings&lt;br /&gt;
        &lt;br /&gt;
        If objList Is Nothing Then&lt;br /&gt;
            QtyYetToPack = 0&lt;br /&gt;
        Else&lt;br /&gt;
            For Each objItem In objList&lt;br /&gt;
                With objItem&lt;br /&gt;
                    If .PackageExists Then&lt;br /&gt;
                        If .Package Is Nothing Then&lt;br /&gt;
                            MsgBox &amp;quot;Package ID=&amp;quot; &amp;amp; .Package_ID &amp;amp; &amp;quot; could not be loaded.&amp;quot;, vbCritical, &amp;quot;Internal Error&amp;quot;&lt;br /&gt;
                        Else&lt;br /&gt;
                            dtItem = .Package.WhenStarted&lt;br /&gt;
                            If dtItem &amp;lt; dtStart Then&lt;br /&gt;
                                qtyPkd = qtyPkd + .QtyHandled&lt;br /&gt;
                            End If&lt;br /&gt;
                        End If&lt;br /&gt;
                    End If&lt;br /&gt;
                End With&lt;br /&gt;
            Next objItem&lt;br /&gt;
            QtyYetToPack = Me.OrderItem.QtyOrd - qtyPkd&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get WasOrdered() As Boolean&lt;br /&gt;
    WasOrdered = (Me.OrderItem_ID &amp;lt;&amp;gt; 0)&lt;br /&gt;
End Property&lt;br /&gt;
&amp;#039;Public Property Get Item() As clsItem&lt;br /&gt;
&amp;#039;&amp;#039; ACTION: returns the package item&amp;#039;s item object, if available, else pops up error messages and allows the user&lt;br /&gt;
&amp;#039;&amp;#039;   to enter missing data.&lt;br /&gt;
&amp;#039;    Dim objItRef As clsItemRef&lt;br /&gt;
&amp;#039;    Dim objItem As clsItem&lt;br /&gt;
&amp;#039;&lt;br /&gt;
&amp;#039;    Set objItRef = Me.ItRef&lt;br /&gt;
&amp;#039;    If objItRef Is Nothing Then&lt;br /&gt;
&amp;#039;        MsgBox &amp;quot;An item in the package has no item reference.&amp;quot;, vbExclamation, &amp;quot;Data Missing&amp;quot;&lt;br /&gt;
&amp;#039;    Else&lt;br /&gt;
&amp;#039;        Set objItem = objItRef.Item&lt;br /&gt;
&amp;#039;        If objItem Is Nothing Then&lt;br /&gt;
&amp;#039;            With objItRef&lt;br /&gt;
&amp;#039;                MsgBox &amp;quot;The item reference &amp;quot; &amp;amp; .DescrText &amp;amp; &amp;quot; (&amp;quot; &amp;amp; .CatNum &amp;amp; &amp;quot;) has no item assigned.&amp;quot;, vbExclamation, &amp;quot;Data Missing&amp;quot;&lt;br /&gt;
&amp;#039;                .Edit&lt;br /&gt;
&amp;#039;            doCancel = True &amp;#039; cancel the rest of the operation&lt;br /&gt;
&amp;#039;            End With&lt;br /&gt;
&amp;#039;        Else&lt;br /&gt;
&amp;#039;            Set Item = objItem&lt;br /&gt;
&amp;#039;        End If&lt;br /&gt;
&amp;#039;    End If&lt;br /&gt;
&amp;#039;End Property&lt;br /&gt;
Public Property Get ShipCode_Exists() As Boolean&lt;br /&gt;
    Dim objItem As clsItem&lt;br /&gt;
    &lt;br /&gt;
    Set objItem = Me.Item&lt;br /&gt;
    If objItem Is Nothing Then Exit Property&lt;br /&gt;
    ShipCode_Exists = objItem.ShipCodeExists&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get ShipCode() As clsShipCode&lt;br /&gt;
&amp;#039; ACTION: returns the package item&amp;#039;s ship code object, if available, else pops up error messages and allows the user&lt;br /&gt;
&amp;#039;   to enter missing data.&lt;br /&gt;
    Dim objItem As clsItem&lt;br /&gt;
    Dim objShip As clsShipCode&lt;br /&gt;
&lt;br /&gt;
    Set objItem = Me.Item&lt;br /&gt;
    If objItem Is Nothing Then Exit Property&lt;br /&gt;
    Set objShip = objItem.ShipCode&lt;br /&gt;
    If objShip Is Nothing Then&lt;br /&gt;
        With objItem&lt;br /&gt;
            MsgBox &amp;quot;The item &amp;quot; &amp;amp; .Description &amp;amp; &amp;quot; (&amp;quot; &amp;amp; .CatNum &amp;amp; &amp;quot;) has no shipping code set.&amp;quot;&lt;br /&gt;
            .Edit&lt;br /&gt;
            doCancel = True &amp;#039; cancel the rest of the operation&lt;br /&gt;
        End With&lt;br /&gt;
        Set ShipCode = Nothing&lt;br /&gt;
    Else&lt;br /&gt;
        Set ShipCode = objShip&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get PriceEffective() As Currency&lt;br /&gt;
&amp;#039; ACTION: returns the effective price of the item, which is the amount quoted in the order item record (if available)&lt;br /&gt;
&amp;#039;   or else defaults to the item&amp;#039;s current price&lt;br /&gt;
    Dim objItem As clsItem&lt;br /&gt;
    Dim objPrice As clsPriceCode&lt;br /&gt;
    &lt;br /&gt;
    If Me.OrderItemExists Then&lt;br /&gt;
        PriceEffective = Me.OrderItem.Price&lt;br /&gt;
    Else&lt;br /&gt;
        Set objItem = Me.Item&lt;br /&gt;
        If objItem Is Nothing Then Exit Property&lt;br /&gt;
        Set objPrice = objItem.PriceCode&lt;br /&gt;
        If objPrice Is Nothing Then&lt;br /&gt;
            With objItem&lt;br /&gt;
                MsgBox &amp;quot;The item &amp;quot; &amp;amp; .Description &amp;amp; &amp;quot; (&amp;quot; &amp;amp; .CatNum &amp;amp; &amp;quot;) has no price code set.&amp;quot;&lt;br /&gt;
                .Edit&lt;br /&gt;
                doCancel = True &amp;#039; cancel the rest of the operation&lt;br /&gt;
            End With&lt;br /&gt;
        Else&lt;br /&gt;
            PriceEffective = Me.Item.PriceCode.Price&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get ShipPkgEffective() As Currency&lt;br /&gt;
&amp;#039; ACTION: returns the effective shipping package cost of the item, which is the amount quoted in the order item record (if available)&lt;br /&gt;
&amp;#039;   or else defaults to the value in the item&amp;#039;s current shipping code&lt;br /&gt;
    Dim objShip As clsShipCode&lt;br /&gt;
    &lt;br /&gt;
    If Me.OrderItemExists Then&lt;br /&gt;
        ShipPkgEffective = Me.OrderItem.ShipPkg&lt;br /&gt;
    Else&lt;br /&gt;
        Set objShip = Me.ShipCode&lt;br /&gt;
        If objShip Is Nothing Then Exit Property&lt;br /&gt;
        ShipPkgEffective = objShip.PerPkg&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get ShipItmEffective() As Currency&lt;br /&gt;
&amp;#039; ACTION: returns the effective shipping per-item cost of the item, which is the amount quoted in the order item record (if available)&lt;br /&gt;
&amp;#039;   or else defaults to the value in the item&amp;#039;s current shipping code&lt;br /&gt;
    Dim objShip As clsShipCode&lt;br /&gt;
    &lt;br /&gt;
    If Me.OrderItemExists Then&lt;br /&gt;
        ShipItmEffective = Me.OrderItem.ShipItem&lt;br /&gt;
    Else&lt;br /&gt;
        Set objShip = Me.ShipCode&lt;br /&gt;
        If objShip Is Nothing Then Exit Property&lt;br /&gt;
        ShipItmEffective = objShip.PerItem&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get PriceTotal() As Currency&lt;br /&gt;
&amp;#039; ACTION: returns the item&amp;#039;s effective price multiplied by the quantity being shipped&lt;br /&gt;
    PriceTotal = Me.PriceEffective * Me.QtyShipped&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get ShipItemTotal() As Currency&lt;br /&gt;
&amp;#039; ACTION: returns the itemized shipping cost multiplied by the quantity being shipped&lt;br /&gt;
    ShipItemTotal = Me.ShipItmEffective * Me.QtyShipped&lt;br /&gt;
End Property&lt;br /&gt;
Public Property Get Packings() As Scripting.Dictionary&lt;br /&gt;
&amp;#039; ACTION: returns a list of all packings of the same line item (including this object)&lt;br /&gt;
    Dim objOItem As clsOrderItem&lt;br /&gt;
&lt;br /&gt;
    If Me.WasOrdered Then&lt;br /&gt;
        Set objOItem = Me.OrderItem&lt;br /&gt;
        If objOItem Is Nothing Then&lt;br /&gt;
            Set Packings = Nothing&lt;br /&gt;
        Else&lt;br /&gt;
            Set Packings = objOItem.Packings&lt;br /&gt;
        End If&lt;br /&gt;
    Else&lt;br /&gt;
        Set Packings = Nothing&lt;br /&gt;
    End If&lt;br /&gt;
End Property&lt;br /&gt;
Private Function Located() As Boolean&lt;br /&gt;
    Dim isFnd As Boolean&lt;br /&gt;
&lt;br /&gt;
    isFnd = True&lt;br /&gt;
    With clsPackageItems&lt;br /&gt;
        With .Data&lt;br /&gt;
            If .EOF Then&lt;br /&gt;
                isFnd = False&lt;br /&gt;
            ElseIf !ID &amp;lt;&amp;gt; vID Then&lt;br /&gt;
                .FindFirst &amp;quot;ID=&amp;quot; &amp;amp; vID&lt;br /&gt;
                If .NoMatch Then&lt;br /&gt;
                    MsgBox &amp;quot;Package Item with ID=&amp;quot; &amp;amp; vID &amp;amp; &amp;quot; was not found.&amp;quot;, vbCritical, &amp;quot;Internal Error&amp;quot;&lt;br /&gt;
                    isFnd = False&lt;br /&gt;
                End If&lt;br /&gt;
            End If&lt;br /&gt;
        End With&lt;br /&gt;
    End With&lt;br /&gt;
    Located = isFnd&lt;br /&gt;
End Function&lt;br /&gt;
Public Sub FetchFromStockLine(iStkLine As Long, iQty As Long)&lt;br /&gt;
    Dim objStkLine As clsStockItem&lt;br /&gt;
    &lt;br /&gt;
    Set objStkLine = clsStockItems.Item(iStkLine)&lt;br /&gt;
    If objStkLine Is Nothing Then Stop  &amp;#039; internal error&lt;br /&gt;
    objStkLine.FetchToPkgLine iQty, Me.ID&lt;br /&gt;
End Sub&lt;br /&gt;
Public Sub FetchFromLocation(iLoc As Long, iQty As Long)&lt;br /&gt;
    Dim sqlFilt As String&lt;br /&gt;
    Dim objStkLine As clsStockItem&lt;br /&gt;
&lt;br /&gt;
    sqlFilt = &amp;quot;(ID_Location=&amp;quot; &amp;amp; iLoc &amp;amp; &amp;quot;) AND (ID_Item=&amp;quot; &amp;amp; Me.Item_ID &amp;amp; &amp;quot;)&amp;quot;&lt;br /&gt;
    Set objStkLine = New clsStockItem&lt;br /&gt;
    With clsStockItems&lt;br /&gt;
        .DataOpen&lt;br /&gt;
        With .Data&lt;br /&gt;
            .FindFirst sqlFilt&lt;br /&gt;
            Do While Not .NoMatch&lt;br /&gt;
                objStkLine.Init .Fields, clsStockItems&lt;br /&gt;
                objStkLine.FetchToPkgLine iQty, Me.ID&lt;br /&gt;
                .FindNext sqlFilt&lt;br /&gt;
            Loop&lt;br /&gt;
        End With&lt;br /&gt;
        .DataShut&lt;br /&gt;
    End With&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/VB&amp;gt;&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>