List 6-158 Business.SlipコンポーネントのCancelRejectSlipメソッド
  1: Public Sub CancelRejectSlip(ByVal SlipID As Long)
  2:     ' 却下した伝票を承認依頼中に戻す
  3:     ' 【引数】
  4:     '   SlipID = 承認依頼中に戻したい伝票の伝票番号
  5:     ' 【戻り値】
  6:     '   なし
  7:     Dim objContext As ObjectContext
  8:     Dim objDataSlip As DataObj.Slip, objDataSlipInformation As DataObj.SlipInformation
  9:     Dim objDataSlipDetail As DataObj.SlipDetail
 10:     Dim objDataProduct As DataObj.Product, objDataStock As DataObj.STOCK
 11:     Dim SlipStatus As SlipStatus
 12:     Dim old_REJECTEDDATE As Variant, old_REJECTEDUSER As Variant
 13:     Dim old_REJECTEDCOMMENT As Variant
 14:     Dim old_REQDATE As Variant, old_REQUSER As Variant, old_REQCOMMENT As Variant
 15:     Dim old_MADEDATE As Variant, old_MADEUSER As Variant
 16:     Dim old_LASTUSER As Variant, old_LASTDATE As Variant
 17:     Dim old_ONEBILLFLAG As Variant, old_BILLID As Variant, old_BILLDATE As Variant
 18:     Dim objRecSlipDetail As ADODB.Recordset
 19:     Dim Number As Long, ProductID As Long
 20:     Dim old_DIVISION As Variant, old_PERSON As Variant, old_DELIVERDATE As Variant
 21:     Dim old_SENT_ADDR As Variant, old_SENT_TEL As Variant, old_MEMO As Variant
 22:     Dim NowStock As Long, willStock As Long
 23:     
 24:     ' オブジェクトコンテキストの取得
 25:     Set objContext = GetObjectContext()
 26:     
 27:     ' エラーハンドラの設定
 28:     On Error GoTo ErrHandle
 29:     
 30:     ' DataObj.Slipコンポーネントを実体化
 31:     Set objDataSlip = CreateObject("DataObj.Slip")
 32:     
 33:     ' 伝票が存在することを確認
 34:     If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
 35:         ' 伝票が存在しない
 36:         Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
                       "指定された伝票は存在しません"
 37:     End If
 38:     
 39:     ' 伝票の状態を取得
 40:     SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
 41:     If (SlipStatus <> Rejected) Then
 42:         ' 伝票が却下中ではない
 43:         Err.Raise BusinessError.Err_CANTUPDATE, App.Title, _
                       "その伝票は却下状態にありません"
 44:     End If
 45:     
 46:     ' ユーザーの確認
 47:     If Not objContext.IsSecurityEnabled() Then
 48:         ' セキュリティ設定が無効
 49:         Err.Raise ERR_NOSECURE, App.Title, _
                       "セキュリティ機構が無効です"
 50:     End If
 51: 
 52:     ' 却下したユーザー情報を取得
 53:     objDataSlip.GetRecord_Rejected SlipID, old_REJECTEDUSER, _
                                        old_REJECTEDDATE, old_REJECTEDCOMMENT
 54: 
 55:     ' 却下したユーザーと呼び出したユーザーが一致するか
 56:     If objContext.Security.GetOriginalCallerName() <> old_REJECTEDUSER Then
 57:         ' 一致しない
 58:         ' SalesAdminロールやAllAdminロールに属する
 59:         ' のであれば,一致しなくてもよいものとする
 60:         If Not (objContext.IsCallerInRole("SalesAdmin") Or _
                     objContext.IsCallerInRole("AllAdmin")) Then
 61:             ' SalesAdminロールやAllAdminロールに属さない
 62:             Err.Raise ERR_NOSECURE, App.Title, _
                           "他人が却下した伝票を元に戻すことはできません"
 63:         End If
 64:     End If
 65: 
 66:     ' 以上で権限の調査は完了。以下,実際のデータ操作に入る
 67: 
 68:     ' REJECTEDFLAGフィールドの値をFalseにする
 69:     objDataSlip.Set_REJECTEDFLAG SlipID, False, Null
 70:     ' REQ_CONSENTFLAGフィールドの値をTrueにする
 71:     objDataSlip.GetRecord_Request SlipID, old_REQUSER, old_REQDATE, old_REQCOMMENT
 72:     objDataSlip.Set_REQ_CONSENTFLAG SlipID, True, old_REQCOMMENT
 73:     
 74:     ' 在庫の調査
 75:     
 76:     ' その時点の伝票追加情報の取得
 77:     ' DataObj.SlipInformationコンポーネントの実体化
 78:     Set objDataSlipInformation = CreateObject("DataObj.SlipInformation")
 79:     objDataSlipInformation.GetRecord SlipID, old_DIVISION, _
                                          old_PERSON, old_DELIVERDATE, _
                                          old_SENT_ADDR, old_SENT_TEL, old_MEMO, _
                                          old_MADEDATE, old_MADEUSER, _
                                          old_LASTDATE, old_LASTUSER
 80:     
 81:     ' その時点の明細レコードの取得
 82:     ' DataObj.SlipDetailコンポーネントの実体化
 83:     Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
 84:     Set objRecSlipDetail = objDataSlipDetail.GetRecords(SlipID)
 85:     
 86:     ' DataObj.Productコンポーネントの実体化
 87:     Set objDataProduct = CreateObject("DataObj.Product")
 88:     ' DataObj.Stockコンポーネントの実体化
 89:     Set objDataStock = CreateObject("DataObj.Stock")
 90:     
 91:     ' すべての明細についてループ
 92:     While Not objRecSlipDetail.EOF
 93:         If Not objRecSlipDetail.Fields("DELETEDFLAG").Value Then
 94:             ' 削除ずみでないならば在庫を調査
 95:             ProductID = objRecSlipDetail.Fields("PRODUCTID").Value
 96:             Number = objRecSlipDetail.Fields("NUMBER").Value
 97:             
 98:             ' その時点の在庫数を取得
 99:             NowStock = objDataProduct.GetNowStock(ProductID)
100:                     
101:             ' 納入予定日までに到着する予定の数量を取得
102:             willStock = objDataStock.GetWillStock(ProductID, old_DELIVERDATE)
103:             
104:             ' 在庫が足りるかどうか
105:             If (NowStock + willStock < Number) Then
106:                 ' 在庫が足りない
107:                 Err.Raise Err_CANTUPDATE, App.Title, _
                               "製品[" & objRecSlipDetail.Fields("PRODUCTNAME").Value & "]" & _
                               "が納入予定日までに揃いません。納入予定日までに揃う数量は" & _
                               NowStock + willStock & "個です"
108:             End If
109:             
110:             ' 予約数を加える
111:             objDataProduct.AddBackOrder ProductID, Number
112:                     
113:         End If
114:         
115:         ' 次のレコードに移動
116:         objRecSlipDetail.MoveNext
117:     Wend
118:     
119:     objRecSlipDetail.Close
120:     Set objRecSlipDetail = Nothing
121:     
122:     ' 各種コンポーネントの解放
123:     Set objDataStock = Nothing
124:     Set objDataProduct = Nothing
125:     Set objDataSlipDetail = Nothing
126:     Set objDataSlipInformation = Nothing
127:     Set objDataSlip = Nothing
128: 
129:     ' トランザクションのコミット
130:     objContext.SetComplete
131:     
132:     ' オブジェクトコンテキストの解放
133:     Set objContext = Nothing
134:     
135:     Exit Sub
136: 
137: ErrHandle:
138:     ' エラーハンドラ
139:     objContext.SetAbort
140:     Set objDataSlip = Nothing
141:     Set objDataSlipInformation = Nothing
142:     Set objDataSlipDetail = Nothing
143:     Set objDataProduct = Nothing
144:     Set objDataStock = Nothing
145:     Set objRecSlipDetail = Nothing
146:    
147:     ' エラーの再発行
148:     Err.Raise Err.Number, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
149: End Sub