﻿<?xml version="1.0" encoding="utf-16"?>
<JiwaDocument xmlns:jiwa="http://www.jiwa.com.au/xml/schemas" Type="JiwaFinancials.Jiwa.JiwaApplication.Plugin.Plugin">
  <RecID>9bb017db-cb5b-48a2-9336-d9c9596b6533</RecID>
  <Name>AERP - 031 - BO Release Copy Carrier</Name>
  <Description>During backorder processing, copies the carrier information from a previous snapshot to the newly created snapshot.</Description>
  <IsEnabled>true</IsEnabled>
  <IsIsolatedToOwnAppDomain>false</IsIsolatedToOwnAppDomain>
  <ExecutionOrder>31</ExecutionOrder>
  <Author>Advanced ERP Consultants</Author>
  <Version>2017.09.25</Version>
  <Code>Option strict On
Option explicit On

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports JiwaFinancials.Jiwa
Imports JiwaFinancials.Jiwa.JiwaSales
Imports JiwaFinancials.Jiwa.JiwaSales.SalesOrder

Public Class BusinessLogicPlugin
    Inherits System.MarshalByRefObject
    Implements JiwaApplication.IJiwaBusinessLogicPlugin

    Private _boProcess As JiwaBOProcess.StdFunctions
    Private _releasedOrders As Dictionary(Of String, String)

    Public Overrides Function InitializeLifetimeService() As Object
        ' returning null here will prevent the lease manager
        ' from deleting the Object.
        Return Nothing
    End Function

    Public Sub Setup(ByVal JiwaBusinessLogic As JiwaApplication.IJiwaBusinessLogic, ByVal Plugin As JiwaApplication.Plugin.Plugin) Implements JiwaApplication.IJiwaBusinessLogicPlugin.Setup
        _boProcess = TryCast(JiwaBusinessLogic, JiwaBOProcess.StdFunctions)
        If _boProcess Is Nothing Then Return ' Panic

        AddHandler _boProcess.ProcessSnapshotCreated, AddressOf BoProcess_SnapshotCreated
        AddHandler _boProcess.ProcessComplete, AddressOf BoProcess_ProcessComplete
        _releasedOrders = New Dictionary(Of String, String)()
    End Sub

    Private Sub BoProcess_ProcessComplete()
		If System.Diagnostics.Debugger.IsAttached Then System.Diagnostics.Debugger.Break()

		' copy key list so that we can remove items from the dictionary as we process them.
        Dim keys As List(Of String) = _releasedOrders.Keys.ToList()
        For Each k As String In keys
            FixCarrier(k, _releasedOrders(k))
            _releasedOrders.Remove(k)
        Next
    End Sub

	' because Jiwa's standard process (as of 7.0.175) doesn't copy carrier information to a new snapshot.
    Private Sub FixCarrier(InvoiceID As String, InvoiceHistoryID As String)
        Dim so As SalesOrder = JiwaApplication.Manager.Instance.BusinessLogicFactory.CreateBusinessLogic(Of SalesOrder)(Nothing)
        so.Setup()
        so.Read(InvoiceID)

		Dim newSoH As SalesOrderHistory = so.SalesOrderHistorys(InvoiceHistoryID)
		newSoH.Carrier.ReadRecord(so.SalesOrderHistorys(newsoh.HistoryNo - 1).Carrier.RecID, True)
		' alternatively, get 1st snapshot's carrier:
        ' newSoH.Carrier.ReadRecord(so.SalesOrderHistorys(1).Carrier.RecID, True)
	
        ' newSoH.Save()
		so.Save(False, False)		' actually put it in the database!
    End Sub

    Private Sub BoProcess_SnapshotCreated(InvoiceID As String, InvoiceHistoryID As String)
        _releasedOrders.Add(InvoiceID, InvoiceHistoryID)
    End Sub

End Class
</Code>
  <ExceptionPolicy>Report</ExceptionPolicy>
  <Language>VisualBasic</Language>
  <BusinessLogicCollection>
    <BusinessLogic>
      <RecID>082530b1-4286-4db2-a6a5-aef37521e476</RecID>
      <Description>Backorder Processing</Description>
      <ClassName>JiwaFinancials.Jiwa.JiwaBOProcess.StdFunctions</ClassName>
      <Assembly>JiwaBOProcess, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</Assembly>
    </BusinessLogic>
  </BusinessLogicCollection>
  <ReferenceCollection>
    <Reference>
      <RecID>2d09abc6-bc8d-428b-a832-dce6f655ef74</RecID>
      <AssemblyFullName>JiwaApplication, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaApplication.dll</AssemblyName>
      <AssemblyLocation>C:\Program Files (x86)\Jiwa Financials\Jiwa 7\JiwaApplication.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>8800953b-2a1a-4ec5-a0c1-b4a77bae9d0e</RecID>
      <AssemblyFullName>mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>mscorlib.dll</AssemblyName>
      <AssemblyLocation>C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>6c8373f0-288a-477b-98b6-752f525f9db0</RecID>
      <AssemblyFullName>System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>c48237eb-4be5-4eff-8a87-40d874867073</RecID>
      <AssemblyFullName>System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Data.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>8761c211-a53a-470a-a544-5c23fa47d095</RecID>
      <AssemblyFullName>System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Xml.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>e6be4848-64ad-4d04-a712-8e834b858c2b</RecID>
      <AssemblyFullName>System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Runtime.Serialization.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>fefdcce8-95c9-4f1d-99b4-11ee54d7661c</RecID>
      <AssemblyFullName>System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Windows.Forms.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>213cd2d8-f78c-4b43-8f08-e14c23e15f01</RecID>
      <AssemblyFullName>Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</AssemblyFullName>
      <AssemblyName>Microsoft.VisualBasic.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualBasic\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualBasic.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>e51f82dc-dbef-4672-bf1f-a7393b1180a2</RecID>
      <AssemblyFullName>JiwaEncryption, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaEncryption.dll</AssemblyName>
      <AssemblyLocation>C:\Program Files (x86)\Jiwa Financials\Jiwa 7\JiwaEncryption.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>ac5c77cc-5c5c-48f1-aab4-c3c0e56bb0e6</RecID>
      <AssemblyFullName>System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyFullName>
      <AssemblyName>System.Core.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>f67daaa5-8cbf-4320-9265-12cb8de97017</RecID>
      <AssemblyFullName>JiwaLib, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaLib.dll</AssemblyName>
      <AssemblyLocation>C:\Program Files (x86)\Jiwa Financials\Jiwa 7\JiwaLib.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>c51c59f3-1327-4e11-921e-9d902b24e34f</RecID>
      <AssemblyFullName>System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</AssemblyFullName>
      <AssemblyName>System.Security.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Security\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Security.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>6cf399fe-4a85-41a3-9a27-659407eb7e2c</RecID>
      <AssemblyFullName>JiwaSales, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaSales.dll</AssemblyName>
      <AssemblyLocation>C:\Program Files (x86)\Jiwa Financials\Jiwa 7\JiwaSales.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>999ff389-4350-4d29-9475-33df032c2af1</RecID>
      <AssemblyFullName>System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</AssemblyFullName>
      <AssemblyName>System.Runtime.Caching.dll</AssemblyName>
      <AssemblyLocation>C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Caching\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll</AssemblyLocation>
    </Reference>
    <Reference>
      <RecID>93b3568d-fe95-4067-b9a1-e204034ecffe</RecID>
      <AssemblyFullName>JiwaBOProcess, Version=7.0.175.0, Culture=neutral, PublicKeyToken=e30ce81e37f29c8c</AssemblyFullName>
      <AssemblyName>JiwaBOProcess.dll</AssemblyName>
      <AssemblyLocation>C:\Program Files (x86)\Jiwa Financials\Jiwa 7\JiwaBOProcess.dll</AssemblyLocation>
    </Reference>
  </ReferenceCollection>
  <PluginReferenceCollection>
    <PluginReference>
      <RecID>2cdbec77-9fca-4e8c-a8e5-e2d50a1b1873</RecID>
      <Plugin>
        <RecID xmlns="Entities">caf90ee5-c649-4fba-9aa9-b254f080f467</RecID>
        <Name xmlns="Entities">AERP - 000 - Shared Library</Name>
        <Description xmlns="Entities">A library of shared tools for use by other AERP plugins.</Description>
        <Author xmlns="Entities">Advanced ERP Consultants</Author>
        <IsEnabled xmlns="Entities">false</IsEnabled>
        <ExecutionOrder xmlns="Entities">0</ExecutionOrder>
      </Plugin>
    </PluginReference>
  </PluginReferenceCollection>
</JiwaDocument>