Files
Nuvolar/Nuvolar.Module/BusinessObjects/Business/BusinessTransactions/Production/RecipeExecutionSimpleVC.vb
T
2017-03-08 11:21:27 +01:00

704 lines
48 KiB
VB.net

Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Text
Imports DevExpress.ExpressApp
Imports DevExpress.ExpressApp.Actions
Imports DevExpress.Persistent.Base
Imports DevExpress.Data.Filtering
Imports DevExpress.Xpo
Imports DevExpress.ExpressApp.Utils
Imports DevExpress.Persistent.BaseImpl
Public Class RecipeExecutionSimpleVC
Inherits DevExpress.ExpressApp.ViewController
Dim _RecipeExecutionFrom_Collection As New ArrayList
Dim _RecipeExecutionTo_Collection As New ArrayList
Dim _VaildData As Boolean = True
Public Sub New()
MyBase.New()
InitializeComponent()
RegisterActions(components)
End Sub
Protected Overrides Sub OnActivated()
MyBase.OnActivated()
If View.Id = "RecipeTo_ListView" Then
Frame.GetController(Of DevExpress.ExpressApp.SystemModule.LinkUnlinkController)().Active.SetItemValue("", False)
Frame.GetController(Of DevExpress.ExpressApp.CloneObject.CloneObjectViewController)().Active.SetItemValue("", False)
End If
If View.Id = "RecipeFrom_ListView" Then
Frame.GetController(Of DevExpress.ExpressApp.SystemModule.LinkUnlinkController)().Active.SetItemValue("", False)
Frame.GetController(Of DevExpress.ExpressApp.CloneObject.CloneObjectViewController)().Active.SetItemValue("", False)
End If
End Sub
Protected Overrides Sub OnDeactivated()
MyBase.OnDeactivated()
If View.Id = "RecipeTo_ListView" Then
Frame.GetController(Of DevExpress.ExpressApp.SystemModule.LinkUnlinkController)().Active.SetItemValue("", True)
Frame.GetController(Of DevExpress.ExpressApp.CloneObject.CloneObjectViewController)().Active.SetItemValue("", True)
End If
If View.Id = "RecipeFrom_ListView" Then
Frame.GetController(Of DevExpress.ExpressApp.SystemModule.LinkUnlinkController)().Active.SetItemValue("", True)
Frame.GetController(Of DevExpress.ExpressApp.CloneObject.CloneObjectViewController)().Active.SetItemValue("", True)
End If
End Sub
Private Sub aRecipeExecutionFrom_CustomizePopupWindowParams(sender As System.Object, e As DevExpress.ExpressApp.Actions.CustomizePopupWindowParamsEventArgs) Handles aRecipeExecutionFrom.CustomizePopupWindowParams
Dim _onew As Xpo.XPObjectSpace = Application.CreateObjectSpace
Dim _RecipeExecutionSimple As RecipeExecutionSimple = TryCast(View.SelectedObjects(0), RecipeExecutionSimple)
Dim _CS As CollectionSource = New CollectionSource(_onew, GetType(RecipeExecutionSimplePopupFrom))
_RecipeExecutionFrom_Collection.Clear()
Dim _RecipeExecutionSimplePopupFrom As RecipeExecutionSimplePopupFrom
For Each _RecipeFrom In _RecipeExecutionSimple.Recipe.RecipeFrom
_RecipeExecutionSimplePopupFrom = _onew.CreateObject(Of RecipeExecutionSimplePopupFrom)()
_RecipeExecutionSimplePopupFrom.RecipeFrom = _onew.GetObject(_RecipeFrom)
_RecipeExecutionSimplePopupFrom.StorageComputed = _onew.FindObject(Of StorageComputed) _
(CriteriaOperator.Parse("Products=? And Storage=?", _onew.GetObject(_RecipeFrom.Products), _onew.GetObject(_RecipeFrom.Storage)))
If _RecipeExecutionSimplePopupFrom.StorageComputed Is Nothing Then
_VaildData = False
Else
_RecipeExecutionSimplePopupFrom.QTTNeed = _RecipeExecutionSimple.QTT * _RecipeFrom.QTT
_RecipeExecutionSimplePopupFrom.QTTDifferent = _RecipeExecutionSimplePopupFrom.StorageComputed.QTTFree - _RecipeExecutionSimplePopupFrom.QTTNeed
If _RecipeExecutionSimplePopupFrom.QTTDifferent < 0 Then
_VaildData = False
End If
_RecipeExecutionFrom_Collection.Add(_RecipeExecutionSimplePopupFrom)
_CS.Add(_RecipeExecutionSimplePopupFrom)
End If
Next
e.View = Application.CreateListView("RecipeExecutionSimplePopupFrom_ListView", _CS, False)
End Sub
Private Sub aRecipeExecutionFrom_Execute(sender As System.Object, e As DevExpress.ExpressApp.Actions.PopupWindowShowActionExecuteEventArgs) Handles aRecipeExecutionFrom.Execute
Dim _onew As Xpo.XPObjectSpace = Application.CreateObjectSpace
Dim _ocur As Xpo.XPObjectSpace = TryCast(View.ObjectSpace, Xpo.XPObjectSpace)
Dim _uow_lock As New UnitOfWork(_onew.Session.DataLayer)
Dim _User As User = _onew.GetObject(TryCast(SecuritySystem.CurrentUser, User))
Try
If _VaildData = False Then Throw New UserFriendlyException("Nem kivitelezhetõ a gyártás, mert egy vagy több alapanyag nem áll rendelkezésre!")
'--==Zárolás==--
'____________________________________________________________________________________________________________________
If Not LockingModule.LockObject(_uow_lock, GetType(StorageComputed), "-", _User) Then
Dim _LockingObject As LockingObject = _onew.FindObject(Of LockingObject)(CriteriaOperator.Parse("TableName=?", GetType(StorageComputed).Name + "-" + "-"))
Dim _Prompt As String = DevExpress.ExpressApp.Utils.CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions\StorageComputed", "CanNotStorageInByLocking")
Dim _Title As String = DevExpress.ExpressApp.Utils.CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions", "MsgBoxError")
MsgBox(String.Format(_Prompt, _LockingObject.User.FullName, _LockingObject.ObjectCreated), MsgBoxStyle.Information + MsgBoxStyle.OkOnly, _Title)
Exit Sub
Else
Dim _RecipeExecutionSimple As RecipeExecutionSimple = TryCast(View.SelectedObjects(0), RecipeExecutionSimple)
'----------------------------------------------------------
'Raktárak feltérképezése, kitárolási fejléc(ek) összerakása
'----------------------------------------------------------
Dim _StorageOutHeader_Collection As New ArrayList '<== Kitároláso fejlécEK kollekciója, annyi kitárolási fejléc, AHÁNY KÜLÖNBÖZÕ raktár van!!!
For Each _RecipeFrom As RecipeFrom In _RecipeExecutionSimple.Recipe.RecipeFrom
If _StorageOutHeader_Collection.Count = 0 Then
Dim _StorageOutHeader As New StorageOutHeader(_ocur.Session)
With _StorageOutHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeFrom.Storage.Oid)
.CustomersFrom = _ocur.GetObjectByKey(Of CustomersFrom)(_RecipeExecutionSimple.CustomersFrom.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.Customers = _ocur.GetObjectByKey(Of Customers)(TryCast(.Storage.CustomersFrom, Customers).Oid)
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageOutHeader_Collection.Add(_StorageOutHeader)
Else
For Each _StorageOutHeaderExist As StorageOutHeader In _StorageOutHeader_Collection
Dim _NewStorage As Boolean = False
If _StorageOutHeaderExist.Storage.Oid <> _RecipeFrom.Storage.Oid Then
_NewStorage = True
End If
If _NewStorage Then
Dim _StorageOutHeader As New StorageOutHeader(_ocur.Session)
With _StorageOutHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeFrom.Storage.Oid)
.Customers = _ocur.GetObjectByKey(Of CustomersFrom)(_RecipeExecutionSimple.CustomersFrom.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.Customers = _ocur.GetObjectByKey(Of Customers)(TryCast(.Storage.CustomersFrom, Customers))
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageOutHeader_Collection.Add(_StorageOutHeader)
End If
Exit For
Next
End If
Next
'----------------------------------------------------------
'Kitárolási sorok kitárolási fejlécekzeh rendelése, StorageComputed toszingálás
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
For Each _RecipeFrom As RecipeFrom In _RecipeExecutionSimple.Recipe.RecipeFrom
If _RecipeFrom.Storage.Oid = _StorageOutHeader.Storage.Oid Then
Dim _StorageOutRows As New StorageOutRows(_ocur.Session)
With _StorageOutRows
.StorageOutHeader = _StorageOutHeader
.RowIndex = _StorageOutHeader.StorageOutRows.Count
.Products = _ocur.GetObjectByKey(Of Products)(_RecipeFrom.Products.Oid)
End With
Dim _StorageInRows_Collection As New XPCollection(Of StorageInRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageInHeader.Storage=? and StorageInHeader.IsEditable=False and StorageInHeader.IsStorno=False and Products=?", _
_StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeFrom.Products.Oid)))
_StorageInRows_Collection.Sorting.Add(New SortProperty("StorageInHeader.CreateDate", DB.SortingDirection.Ascending))
Dim _QTT_Mod As Double = _RecipeFrom.QTT * _RecipeExecutionSimple.QTT
For Each _StorageInRows As StorageInRows In _StorageInRows_Collection
Dim _QTT_Free As Double = _StorageInRows.QTT - _StorageInRows.QTT_Out - _StorageInRows.QTT_Out_Will
If _QTT_Free > 0 Then
If _QTT_Free < _QTT_Mod Then
_StorageInRows.QTT_Out_Will += _QTT_Free
_StorageOutRows.QTT_Will += _QTT_Free
_QTT_Mod -= _QTT_Free
'------- FIFO sor beszúrása
Dim _StorageOutRowsInRows As StorageOutRowsInRows = _ocur.FindObject(Of StorageOutRowsInRows)(CriteriaOperator.Parse("StorageInRows=? and StorageOutRows=?", _
_StorageInRows, _StorageOutRows), True)
If _StorageOutRowsInRows IsNot Nothing Then
_StorageOutRowsInRows.QTT += _QTT_Free
Else
_StorageOutRowsInRows = New StorageOutRowsInRows(_ocur.Session)
_StorageOutRowsInRows.StorageInRows = _StorageInRows
_StorageOutRowsInRows.StorageOutRows = _StorageOutRows
_StorageOutRowsInRows.QTT = _QTT_Free
End If
Else
_StorageInRows.QTT_Out_Will += _QTT_Mod
_StorageOutRows.QTT_Will += _QTT_Mod
'------- FIFO sor beszúrása
Dim _StorageOutRowsInRows As StorageOutRowsInRows = _ocur.FindObject(Of StorageOutRowsInRows)(CriteriaOperator.Parse("StorageInRows=? and StorageOutRows=?", _
_StorageInRows, _StorageOutRows), True)
If _StorageOutRowsInRows IsNot Nothing Then
_StorageOutRowsInRows.QTT += _QTT_Mod
Else
_StorageOutRowsInRows = New StorageOutRowsInRows(_ocur.Session)
_StorageOutRowsInRows.StorageInRows = _StorageInRows
_StorageOutRowsInRows.StorageOutRows = _StorageOutRows
_StorageOutRowsInRows.QTT = _QTT_Mod
End If
Exit For
End If
End If
Next
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Storage=? and Products=?", _
_StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeFrom.Products.Oid)), True)
Dim _QTT_ReservedOut As Double = _StorageComputed.QTTReservedOut
Dim _QTT_Will_Out As Double = 0
Dim _StorageOutRows_Collection_R As New XPCollection(Of StorageOutRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("QTT_Will>0 and StorageOutHeader.Storage=? and Products=?", _StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeFrom.Products.Oid)))
For Each _StorageOutRows_R In _StorageOutRows_Collection_R
_QTT_Will_Out += _StorageOutRows_R.QTT_Will
Next
_StorageComputed.QTTFree = _StorageComputed.QTTFree - (_QTT_Will_Out - _QTT_ReservedOut)
_StorageComputed.QTTReservedOut = _QTT_Will_Out
End If
Next
Next
'----------------------------------------------------------
'Kitárolás(ok) véglegesítése, mozgástábla, StorageComputed baszogatás
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
_StorageOutHeader.IsEditable = False
_StorageOutHeader.IsFinalized = True
For Each _StorageOutRows As StorageOutRows In _StorageOutHeader.StorageOutRows
Dim _StorageOutRowsInRows_Collection As New XPCollection(Of StorageOutRowsInRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageOutRows=?", _StorageOutRows))
For Each _StorageOutRowsInRows In _StorageOutRowsInRows_Collection
If _StorageOutRowsInRows.QTT > 0 Then
Dim _StorageMoveEvents_Collection As New XPCollection(Of StorageMoveEvents)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageInRows=?", _StorageOutRowsInRows.StorageInRows))
_StorageMoveEvents_Collection.Sorting.Add(New SortProperty("ObjectCreated", DB.SortingDirection.Descending))
_StorageOutRowsInRows.StorageInRows.QTT_Out += _StorageOutRowsInRows.QTT
_StorageOutRowsInRows.StorageInRows.QTT_Out_Will -= _StorageOutRowsInRows.QTT
Dim _StorageMoveEvents As New StorageMoveEvents(_ocur.Session)
_StorageMoveEvents.StorageInRows = _StorageOutRowsInRows.StorageInRows
_StorageMoveEvents.StorageOutRows = _StorageOutRowsInRows.StorageOutRows
If _StorageMoveEvents_Collection.Count > 0 Then
_StorageMoveEvents.QTT_Free_Before = _StorageMoveEvents_Collection(0).QTT_Free_After
Else
_StorageMoveEvents.QTT_Free_Before = 0
End If
_StorageMoveEvents.QTT = (-1) * _StorageOutRowsInRows.QTT
_StorageMoveEvents.QTT_Free_After = _StorageMoveEvents.QTT_Free_Before + _StorageMoveEvents.QTT
_StorageMoveEvents.MoveEventsType = eMoveEventsType.StorageOutFinal
_StorageMoveEvents.ExecutionDate = _StorageOutRowsInRows.StorageOutRows.StorageOutHeader.CreateDate
End If
Next
_StorageOutRows.QTT += _StorageOutRows.QTT_Will
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_StorageOutRows.Products, _StorageOutRows.StorageOutHeader.Storage), True)
_StorageComputed.QTTReservedOut -= _StorageOutRows.QTT_Will
_StorageOutRows.QTT_Will = 0
Next
Next
'----------------------------------------------------------
'Betárolás raktár(ak)ba
'----------------------------------------------------------
Dim _StorageInHeader_Collection As New ArrayList
For Each _RecipeTo As RecipeTo In _RecipeExecutionSimple.Recipe.RecipeTo
If _StorageInHeader_Collection.Count = 0 Then
Dim _StorageInHeader As New StorageInHeader(_ocur.Session)
With _StorageInHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeTo.Storage.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.IsEditable = False
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageInHeader_Collection.Add(_StorageInHeader)
Else
For Each _StorageInHeaderExist As StorageInHeader In _StorageInHeader_Collection
Dim _NewStorage As Boolean = False
If _StorageInHeaderExist.Storage.Oid <> _RecipeTo.Storage.Oid Then
_NewStorage = True
End If
If _NewStorage Then
Dim _StorageInHeader As New StorageInHeader(_ocur.Session)
With _StorageInHeader
.Storage = _onew.GetObjectByKey(Of Storage)(_RecipeTo.Storage.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.IsEditable = False
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageInHeader_Collection.Add(_StorageInHeader)
Exit For
End If
Next
End If
Next
For Each _RecipeTo As RecipeTo In _RecipeExecutionSimple.Recipe.RecipeTo
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
If _RecipeTo.Storage.Oid = _StorageInHeader.Storage.Oid Then
Dim _StorageInRows As New StorageInRows(_ocur.Session)
With _StorageInRows
.StorageInHeader = _StorageInHeader
.Products = _RecipeTo.Products
.QTT_Will = _RecipeTo.QTT * _RecipeExecutionSimple.QTT
.RowIndex = _StorageInHeader.StorageInRows.Count
.AveragePriceInHUF = _RecipeTo.ListPriceHUF
End With
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_RecipeTo.Products, _StorageInHeader.Storage))
If _StorageComputed Is Nothing Then
_StorageComputed = New StorageComputed(_ocur.Session)
With _StorageComputed
.Storage = _StorageInHeader.Storage
.Products = _RecipeTo.Products
.QTTReservedIn = _RecipeTo.QTT * _RecipeExecutionSimple.QTT
End With
Else
_StorageComputed.QTTReservedIn += _RecipeTo.QTT * _RecipeExecutionSimple.QTT
End If
End If
Next
Next
'----------------------------------------------------------
'Betárolás(ok) véglegeítése
'----------------------------------------------------------
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
_StorageInHeader.IsEditable = False
_StorageInHeader.IsFinalized = True
For Each _StorageInRows As StorageInRows In _StorageInHeader.StorageInRows
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_ocur.GetObject(_StorageInRows.Products), _ocur.GetObject(_StorageInHeader.Storage)))
Dim _StorageMoveEvents As New StorageMoveEvents(_ocur.Session)
If _StorageInRows.QTT_Will > 0 Then
_StorageInRows.QTT = _StorageInRows.QTT_Will
_StorageComputed.QTTFree += _StorageInRows.QTT_Will
_StorageComputed.QTTReservedIn -= _StorageInRows.QTT_Will
_StorageMoveEvents.StorageInRows = _ocur.GetObject(_StorageInRows)
_StorageMoveEvents.QTT = _StorageInRows.QTT_Will
_StorageMoveEvents.QTT_Free_After = _StorageComputed.QTTFree
_StorageMoveEvents.QTT_Free_Before = _StorageMoveEvents.QTT_Free_After - _StorageMoveEvents.QTT
_StorageMoveEvents.MoveEventsType = eMoveEventsType.StorageInFinal
_StorageMoveEvents.ExecutionDate = _StorageInRows.StorageInHeader.CreateDate
_StorageInRows.QTT_Will = 0
End If
Next
Next
_ocur.CommitChanges()
'----------------------------------------------------------
'Nyomtatványok
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
Dim _ReportData As ReportData = _onew.FindObject(Of ReportData)(CriteriaOperator.Parse("Oid=?", _StorageOutHeader.Storage.ReportOut.Oid), True)
If _ReportData IsNot Nothing Then
Frame.GetController(Of Reports.ReportServiceController).ShowPreview(_ReportData, CriteriaOperator.Parse("StorageOutRows.StorageOutHeader.DocumentNumber=?", _StorageOutHeader.DocumentNumber), True)
End If
Next
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
Dim _ReportData As ReportData = _onew.FindObject(Of ReportData)(CriteriaOperator.Parse("Oid=?", _StorageInHeader.Storage.ReportIn.Oid), True)
If _ReportData IsNot Nothing Then
Frame.GetController(Of Reports.ReportServiceController).ShowPreview(_ReportData, CriteriaOperator.Parse("StorageInHeader.DocumentNumber =?", _StorageInHeader.DocumentNumber), True)
End If
Next
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, String.Format(CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions", "MsgBoxCheckItAgain")))
Finally
LockingModule.UnLockObject(_uow_lock, GetType(StorageComputed), "-", _User)
End Try
End Sub
Private Sub aRecipeExecutionTo_CustomizePopupWindowParams(sender As Object, e As CustomizePopupWindowParamsEventArgs) Handles aRecipeExecutionTo.CustomizePopupWindowParams
Dim _onew As Xpo.XPObjectSpace = Application.CreateObjectSpace
Dim _RecipeExecutionSimple As RecipeExecutionSimple = TryCast(View.SelectedObjects(0), RecipeExecutionSimple)
Dim _CS As CollectionSource = New CollectionSource(_onew, GetType(RecipeExecutionSimplePopupTo))
_RecipeExecutionTo_Collection.Clear()
Dim _RecipeExecutionSimplePopupTo As RecipeExecutionSimplePopupTo
For Each _RecipeTo In _RecipeExecutionSimple.Recipe.RecipeTo
_RecipeExecutionSimplePopupTo = _onew.CreateObject(Of RecipeExecutionSimplePopupTo)()
_RecipeExecutionSimplePopupTo.RecipeTo = _onew.GetObject(_RecipeTo)
_RecipeExecutionSimplePopupTo.StorageComputed = _onew.FindObject(Of StorageComputed) _
(CriteriaOperator.Parse("Products=? And Storage=?", _onew.GetObject(_RecipeTo.Products), _onew.GetObject(_RecipeTo.Storage)))
_RecipeExecutionSimplePopupTo.QTTNeed = _RecipeExecutionSimple.QTT * _RecipeTo.QTT
_RecipeExecutionSimplePopupTo.QTTDifferent = _RecipeExecutionSimplePopupTo.StorageComputed.QTTFree - _RecipeExecutionSimplePopupTo.QTTNeed
If _RecipeExecutionSimplePopupTo.QTTDifferent < 0 Then
_VaildData = False
End If
_RecipeExecutionTo_Collection.Add(_RecipeExecutionSimplePopupTo)
_CS.Add(_RecipeExecutionSimplePopupTo)
Next
e.View = Application.CreateListView("RecipeExecutionSimplePopupTo_ListView", _CS, False)
End Sub
Private Sub aRecipeExecutionTo_Execute(sender As Object, e As PopupWindowShowActionExecuteEventArgs) Handles aRecipeExecutionTo.Execute
Dim _onew As Xpo.XPObjectSpace = Application.CreateObjectSpace
Dim _ocur As Xpo.XPObjectSpace = TryCast(View.ObjectSpace, Xpo.XPObjectSpace)
Dim _uow_lock As New UnitOfWork(_onew.Session.DataLayer)
Dim _User As User = _onew.GetObject(TryCast(SecuritySystem.CurrentUser, User))
Try
If _VaildData = False Then Throw New UserFriendlyException("Nem kivitelezhetõ a gyártás, mert egy vagy több alapanyag nem áll rendelkezésre!")
'--==Zárolás==--
'____________________________________________________________________________________________________________________
If Not LockingModule.LockObject(_uow_lock, GetType(StorageComputed), "-", _User) Then
Dim _LockingObject As LockingObject = _onew.FindObject(Of LockingObject)(CriteriaOperator.Parse("TableName=?", GetType(StorageComputed).Name + "-" + "-"))
Dim _Prompt As String = DevExpress.ExpressApp.Utils.CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions\StorageComputed", "CanNotStorageInByLocking")
Dim _Title As String = DevExpress.ExpressApp.Utils.CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions", "MsgBoxError")
MsgBox(String.Format(_Prompt, _LockingObject.User.FullName, _LockingObject.ObjectCreated), MsgBoxStyle.Information + MsgBoxStyle.OkOnly, _Title)
Exit Sub
Else
Dim _RecipeExecutionSimple As RecipeExecutionSimple = TryCast(View.SelectedObjects(0), RecipeExecutionSimple)
'----------------------------------------------------------
'Raktárak feltérképezése, kitárolási fejléc(ek) összerakása
'----------------------------------------------------------
Dim _StorageOutHeader_Collection As New ArrayList '<== Kitároláso fejlécEK kollekciója, annyi kitárolási fejléc, AHÁNY KÜLÖNBÖZÕ raktár van!!!
For Each _RecipeTo As RecipeTo In _RecipeExecutionSimple.Recipe.RecipeTo
If _StorageOutHeader_Collection.Count = 0 Then
Dim _StorageOutHeader As New StorageOutHeader(_ocur.Session)
With _StorageOutHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeTo.Storage.Oid)
.CustomersFrom = _ocur.GetObjectByKey(Of CustomersFrom)(_RecipeExecutionSimple.CustomersFrom.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.Customers = _ocur.GetObjectByKey(Of Customers)(TryCast(.Storage.CustomersFrom, Customers).Oid)
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageOutHeader_Collection.Add(_StorageOutHeader)
Else
For Each _StorageOutHeaderExist As StorageOutHeader In _StorageOutHeader_Collection
Dim _NewStorage As Boolean = False
If _StorageOutHeaderExist.Storage.Oid <> _RecipeTo.Storage.Oid Then
_NewStorage = True
End If
If _NewStorage Then
Dim _StorageOutHeader As New StorageOutHeader(_ocur.Session)
With _StorageOutHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeTo.Storage.Oid)
.Customers = _ocur.GetObjectByKey(Of CustomersFrom)(_RecipeExecutionSimple.CustomersFrom.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.Customers = _ocur.GetObjectByKey(Of Customers)(TryCast(.Storage.CustomersFrom, Customers))
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageOutHeader_Collection.Add(_StorageOutHeader)
End If
Exit For
Next
End If
Next
'----------------------------------------------------------
'Kitárolási sorok kitárolási fejlécekzeh rendelése, StorageComputed toszingálás
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
For Each _RecipeTo As RecipeTo In _RecipeExecutionSimple.Recipe.RecipeTo
If _RecipeTo.Storage.Oid = _StorageOutHeader.Storage.Oid Then
Dim _StorageOutRows As New StorageOutRows(_ocur.Session)
With _StorageOutRows
.StorageOutHeader = _StorageOutHeader
.RowIndex = _StorageOutHeader.StorageOutRows.Count
.Products = _ocur.GetObjectByKey(Of Products)(_RecipeTo.Products.Oid)
End With
Dim _StorageInRows_Collection As New XPCollection(Of StorageInRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageInHeader.Storage=? and StorageInHeader.IsEditable=False and StorageInHeader.IsStorno=False and Products=?", _
_StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeTo.Products.Oid)))
_StorageInRows_Collection.Sorting.Add(New SortProperty("StorageInHeader.CreateDate", DB.SortingDirection.Ascending))
Dim _QTT_Mod As Double = _RecipeTo.QTT * _RecipeExecutionSimple.QTT
For Each _StorageInRows As StorageInRows In _StorageInRows_Collection
Dim _QTT_Free As Double = _StorageInRows.QTT - _StorageInRows.QTT_Out - _StorageInRows.QTT_Out_Will
If _QTT_Free > 0 Then
If _QTT_Free < _QTT_Mod Then
_StorageInRows.QTT_Out_Will += _QTT_Free
_StorageOutRows.QTT_Will += _QTT_Free
_QTT_Mod -= _QTT_Free
'------- FIFO sor beszúrása
Dim _StorageOutRowsInRows As StorageOutRowsInRows = _ocur.FindObject(Of StorageOutRowsInRows)(CriteriaOperator.Parse("StorageInRows=? and StorageOutRows=?", _
_StorageInRows, _StorageOutRows), True)
If _StorageOutRowsInRows IsNot Nothing Then
_StorageOutRowsInRows.QTT += _QTT_Free
Else
_StorageOutRowsInRows = New StorageOutRowsInRows(_ocur.Session)
_StorageOutRowsInRows.StorageInRows = _StorageInRows
_StorageOutRowsInRows.StorageOutRows = _StorageOutRows
_StorageOutRowsInRows.QTT = _QTT_Free
End If
Else
_StorageInRows.QTT_Out_Will += _QTT_Mod
_StorageOutRows.QTT_Will += _QTT_Mod
'------- FIFO sor beszúrása
Dim _StorageOutRowsInRows As StorageOutRowsInRows = _ocur.FindObject(Of StorageOutRowsInRows)(CriteriaOperator.Parse("StorageInRows=? and StorageOutRows=?", _
_StorageInRows, _StorageOutRows), True)
If _StorageOutRowsInRows IsNot Nothing Then
_StorageOutRowsInRows.QTT += _QTT_Mod
Else
_StorageOutRowsInRows = New StorageOutRowsInRows(_ocur.Session)
_StorageOutRowsInRows.StorageInRows = _StorageInRows
_StorageOutRowsInRows.StorageOutRows = _StorageOutRows
_StorageOutRowsInRows.QTT = _QTT_Mod
End If
Exit For
End If
End If
Next
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Storage=? and Products=?", _
_StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeTo.Products.Oid)), True)
Dim _QTT_ReservedOut As Double = _StorageComputed.QTTReservedOut
Dim _QTT_Will_Out As Double = 0
Dim _StorageOutRows_Collection_R As New XPCollection(Of StorageOutRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("QTT_Will>0 and StorageOutHeader.Storage=? and Products=?", _StorageOutHeader.Storage, _ocur.GetObjectByKey(Of Products)(_RecipeTo.Products.Oid)))
For Each _StorageOutRows_R In _StorageOutRows_Collection_R
_QTT_Will_Out += _StorageOutRows_R.QTT_Will
Next
_StorageComputed.QTTFree = _StorageComputed.QTTFree - (_QTT_Will_Out - _QTT_ReservedOut)
_StorageComputed.QTTReservedOut = _QTT_Will_Out
End If
Next
Next
'----------------------------------------------------------
'Kitárolás(ok) véglegesítése, mozgástábla, StorageComputed baszogatás
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
_StorageOutHeader.IsEditable = False
_StorageOutHeader.IsFinalized = True
For Each _StorageOutRows As StorageOutRows In _StorageOutHeader.StorageOutRows
Dim _StorageOutRowsInRows_Collection As New XPCollection(Of StorageOutRowsInRows)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageOutRows=?", _StorageOutRows))
For Each _StorageOutRowsInRows In _StorageOutRowsInRows_Collection
If _StorageOutRowsInRows.QTT > 0 Then
Dim _StorageMoveEvents_Collection As New XPCollection(Of StorageMoveEvents)(PersistentCriteriaEvaluationBehavior.InTransaction, _ocur.Session, _
CriteriaOperator.Parse("StorageInRows=?", _StorageOutRowsInRows.StorageInRows))
_StorageMoveEvents_Collection.Sorting.Add(New SortProperty("ObjectCreated", DB.SortingDirection.Descending))
_StorageOutRowsInRows.StorageInRows.QTT_Out += _StorageOutRowsInRows.QTT
_StorageOutRowsInRows.StorageInRows.QTT_Out_Will -= _StorageOutRowsInRows.QTT
Dim _StorageMoveEvents As New StorageMoveEvents(_ocur.Session)
_StorageMoveEvents.StorageInRows = _StorageOutRowsInRows.StorageInRows
_StorageMoveEvents.StorageOutRows = _StorageOutRowsInRows.StorageOutRows
If _StorageMoveEvents_Collection.Count > 0 Then
_StorageMoveEvents.QTT_Free_Before = _StorageMoveEvents_Collection(0).QTT_Free_After
Else
_StorageMoveEvents.QTT_Free_Before = 0
End If
_StorageMoveEvents.QTT = (-1) * _StorageOutRowsInRows.QTT
_StorageMoveEvents.QTT_Free_After = _StorageMoveEvents.QTT_Free_Before + _StorageMoveEvents.QTT
_StorageMoveEvents.MoveEventsType = eMoveEventsType.StorageOutFinal
_StorageMoveEvents.ExecutionDate = _StorageOutRowsInRows.StorageOutRows.StorageOutHeader.CreateDate
End If
Next
_StorageOutRows.QTT += _StorageOutRows.QTT_Will
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_StorageOutRows.Products, _StorageOutRows.StorageOutHeader.Storage), True)
_StorageComputed.QTTReservedOut -= _StorageOutRows.QTT_Will
_StorageOutRows.QTT_Will = 0
Next
Next
'----------------------------------------------------------
'Betárolás raktár(ak)ba
'----------------------------------------------------------
Dim _StorageInHeader_Collection As New ArrayList
For Each _RecipeFrom As RecipeFrom In _RecipeExecutionSimple.Recipe.RecipeFrom
If _StorageInHeader_Collection.Count = 0 Then
Dim _StorageInHeader As New StorageInHeader(_ocur.Session)
With _StorageInHeader
.Storage = _ocur.GetObjectByKey(Of Storage)(_RecipeFrom.Storage.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.IsEditable = False
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageInHeader_Collection.Add(_StorageInHeader)
Else
For Each _StorageInHeaderExist As StorageInHeader In _StorageInHeader_Collection
Dim _NewStorage As Boolean = False
If _StorageInHeaderExist.Storage.Oid <> _RecipeFrom.Storage.Oid Then
_NewStorage = True
End If
If _NewStorage Then
Dim _StorageInHeader As New StorageInHeader(_ocur.Session)
With _StorageInHeader
.Storage = _onew.GetObjectByKey(Of Storage)(_RecipeFrom.Storage.Oid)
.RecipeExecutionSimple = _RecipeExecutionSimple
.IsEditable = False
.StorageMoveType = _ocur.GetObject(_RecipeExecutionSimple.RecipeExecutionSimpleType.StorageMoveType)
End With
_StorageInHeader_Collection.Add(_StorageInHeader)
Exit For
End If
Next
End If
Next
For Each _RecipeFrom As RecipeFrom In _RecipeExecutionSimple.Recipe.RecipeFrom
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
If _RecipeFrom.Storage.Oid = _StorageInHeader.Storage.Oid Then
Dim _StorageInRows As New StorageInRows(_ocur.Session)
With _StorageInRows
.StorageInHeader = _StorageInHeader
.Products = _RecipeFrom.Products
.QTT_Will = _RecipeFrom.QTT * _RecipeExecutionSimple.QTT
.RowIndex = _StorageInHeader.StorageInRows.Count
.AveragePriceInHUF = _RecipeFrom.ListPriceHUF
End With
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_RecipeFrom.Products, _StorageInHeader.Storage))
If _StorageComputed Is Nothing Then
_StorageComputed = New StorageComputed(_ocur.Session)
With _StorageComputed
.Storage = _StorageInHeader.Storage
.Products = _RecipeFrom.Products
.QTTReservedIn = _RecipeFrom.QTT * _RecipeExecutionSimple.QTT
End With
Else
_StorageComputed.QTTReservedIn += _RecipeFrom.QTT * _RecipeExecutionSimple.QTT
End If
End If
Next
Next
'----------------------------------------------------------
'Betárolás(ok) véglegeítése
'----------------------------------------------------------
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
_StorageInHeader.IsEditable = False
_StorageInHeader.IsFinalized = True
For Each _StorageInRows As StorageInRows In _StorageInHeader.StorageInRows
Dim _StorageComputed As StorageComputed = _ocur.FindObject(Of StorageComputed)(CriteriaOperator.Parse("Products=? and Storage=?", _
_ocur.GetObject(_StorageInRows.Products), _ocur.GetObject(_StorageInHeader.Storage)))
Dim _StorageMoveEvents As New StorageMoveEvents(_ocur.Session)
If _StorageInRows.QTT_Will > 0 Then
_StorageInRows.QTT = _StorageInRows.QTT_Will
_StorageComputed.QTTFree += _StorageInRows.QTT_Will
_StorageComputed.QTTReservedIn -= _StorageInRows.QTT_Will
_StorageMoveEvents.StorageInRows = _ocur.GetObject(_StorageInRows)
_StorageMoveEvents.QTT = _StorageInRows.QTT_Will
_StorageMoveEvents.QTT_Free_After = _StorageComputed.QTTFree
_StorageMoveEvents.QTT_Free_Before = _StorageMoveEvents.QTT_Free_After - _StorageMoveEvents.QTT
_StorageMoveEvents.MoveEventsType = eMoveEventsType.StorageInFinal
_StorageMoveEvents.ExecutionDate = _StorageInRows.StorageInHeader.CreateDate
_StorageInRows.QTT_Will = 0
End If
Next
Next
_ocur.CommitChanges()
'----------------------------------------------------------
'Nyomtatványok
'----------------------------------------------------------
For Each _StorageOutHeader As StorageOutHeader In _StorageOutHeader_Collection
Dim _ReportData As ReportData = _onew.FindObject(Of ReportData)(CriteriaOperator.Parse("Oid=?", _StorageOutHeader.Storage.ReportOut.Oid), True)
If _ReportData IsNot Nothing Then
Frame.GetController(Of Reports.ReportServiceController).ShowPreview(_ReportData, CriteriaOperator.Parse("StorageOutRows.StorageOutHeader.DocumentNumber=?", _StorageOutHeader.DocumentNumber), True)
End If
Next
For Each _StorageInHeader As StorageInHeader In _StorageInHeader_Collection
Dim _ReportData As ReportData = _onew.FindObject(Of ReportData)(CriteriaOperator.Parse("Oid=?", _StorageInHeader.Storage.ReportIn.Oid), True)
If _ReportData IsNot Nothing Then
Frame.GetController(Of Reports.ReportServiceController).ShowPreview(_ReportData, CriteriaOperator.Parse("StorageInHeader.DocumentNumber =?", _StorageInHeader.DocumentNumber), True)
End If
Next
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, String.Format(CaptionHelper.GetLocalizedText("Exceptions\NuvolarExceptions", "MsgBoxCheckItAgain")))
Finally
LockingModule.UnLockObject(_uow_lock, GetType(StorageComputed), "-", _User)
End Try
End Sub
End Class