Next Chapter 52 Purchase

Purchase

'******************************************************************

'******************************************************************

'** Author : Samee Ullah Siddiqui

'** Subject : Manipulate Purchase/Purchase Return Details

'** Date : Thursday, August, 21, 2003

'** Modified : Monday, August, 25, 2003

'******************************************************************

'******************************************************************

Dim ADDMode As Boolean

Dim EditMode As Boolean

Dim EmptyTable As Boolean

Dim VoucherType As String

Dim FormLoaded As Boolean

Dim PurchaseRst As ADODB.Recordset

Dim Bmark

Dim Conn As ADODB.Connection

Dim WithEvents vMenu As Menu

Private Sub AddCmd_Click()

ADDMode = True

Call SetControls

Call ClearFields

Call CashCB_Click

Conn.BeginTrans

End Sub

Private Sub CancelCmd_Click()

Conn.RollbackTrans

ADDMode = False

EditMode = False

Call SetControls

End Sub

Private Sub CartTxt_Change()

Call NetPayableAmount

End Sub

Private Sub CartTxt_GotFocus()

SelectText CartTxt

End Sub

Private Sub CartTxt_KeyPress(KeyAscii As Integer)

ValidateNumber KeyAscii

End Sub

Private Sub CartTxt_Validate(Cancel As Boolean)

ValidateDesimal CartTxt, Cancel, 2

CartTxt = Format(CartTxt, "#0.#0")

End Sub

Private Sub CashCB_Click()

Set AccSrch.BoundTextBox = IIf(CashCB.ListIndex <= 0, Nothing, SuplTxt)

MrnTxt = GetVoucherCode

End Sub

Private Sub DelCmd_Click()

If MrnTxt = "" Then MsgBox "Please select voucher no. to delete", vbCritical, "Invalid voucher no.": Exit Sub

If MsgBox("This will delete selected voucher. Are you sure to delete it.", vbQuestion + vbYesNo + vbDefaultButton2, "Deletion Confirmation") = vbNo Then Exit Sub

Call DeleteVoucher

Conn.CommitTrans

PurchaseRst.Requery

VnoSrch.PopulateList

If Not (PurchaseRst.RecordCount > 0) Then EmptyTable = True

ADDMode = False

EditMode = False

Call SetControls

Call SetFieldsValues(PurchaseRst)

End Sub

Private Sub EditCmd_Click()

EditMode = True

Call SetControls

Call ClearFields

ItemGrid.RefreshEditor

Conn.BeginTrans

End Sub

Private Sub ExitCmd_Click()

Unload Me

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyReturn Then

If (Me.ActiveControl.Name = "SuplTxt" And CashCB.ListIndex = 1) Then Exit Sub

If (Me.ActiveControl.Name = "ItemGrid") Then Exit Sub

If (EditMode And Me.ActiveControl.Name = "MrnTxt") Then Exit Sub

SendKeys "{TAB}"

ElseIf Shift = vbCtrlMask And KeyCode = vbKeyLeft Then

If PrevCmd.Enabled Then PrevCmd.SetFocus

Call PrevCmd_Click

ElseIf Shift = vbCtrlMask And KeyCode = vbKeyRight Then

If NextCmd.Enabled Then NextCmd.SetFocus

Call NextCmd_Click

ElseIf Shift = vbCtrlMask And KeyCode = vbKeyHome Then

If TopCmd.Enabled Then TopCmd.SetFocus

Call TopCmd_Click

ElseIf Shift = vbCtrlMask And KeyCode = vbKeyEnd Then

If LastCmd.Enabled Then LastCmd.SetFocus

Call LastCmd_Click

End If

End Sub

Private Sub SetGridProps(Optional Rows As Integer)

With ItemGrid

.Clear

.FormatString = "S No.|<Item Particulars|>Packing|>Stock|>Qty|>Rate|>Amount|IID|Stock|OldQty"

.Rows = IIf(Rows <= 1, 2, Rows)

.ColWidth(1) = TextWidth("A") * 55 'PARTICULARS

.ColWidth(2) = TextWidth("A") * 8 'Packing

.ColWidth(3) = TextWidth("A") * 8 'Stock

.ColWidth(4) = TextWidth("A") * 8 'QUANTITY

.ColWidth(5) = TextWidth("A") * 8 'RATE

.ColWidth(6) = TextWidth("A") * 15 'AMOUNT

.ColWidth(7) = TextWidth("A") * 0 'Item Code

.ColWidth(8) = TextWidth("A") * 0 'Stock

.ColWidth(9) = TextWidth("A") * 0 'Old Quantity

.ColWidth(10) = TextWidth("A") * 0 'Batch Number

.ColWidth(11) = TextWidth("A") * 0 'Exp Date

.ColWidth(12) = TextWidth("A") * 0 'Mfg Date

.ColWidth(13) = TextWidth("A") * 0 'Free

.EnableEditing(3) = False 'Stock

.EnableEditing(6) = False 'Amount

.EnableEditing(7) = False 'Item Code

.EnableEditing(8) = False 'Stock

.EnableEditing(9) = False 'Old Quantity

.NumbersOnly(2, 3, 50) = True

.NumbersOnly(3, 7) = True

.NumbersOnly(4, 4) = True

.NumbersOnly(5, 6) = True

.NumbersOnly(6, 10) = True

End With

End Sub

Private Sub Form_Load()

TxtType.Text = "Medicine"

Call TxtType_Click

If Expiry = False Or TxtType.Text = "Other" Then Call SetGridProps Else Call SetGridPropsForMedicine

End Sub

Private Sub Form_Paint()

If FormLoaded Then Exit Sub

If Me.Tag = "" Then

MsgBox "Cannot indentified voucher type.", vbCritical, "Application Terminated"

Exit Sub

End If

VoucherType = Me.Tag

Me.Caption = IIf(VoucherType = "PV", "Purchase Entry", "Purchase Return Entry")

Label1(1).Caption = IIf(VoucherType = "PV", "Purchase Entry", "Purchase Return Entry")

Label2(4).Caption = IIf(VoucherType = "PV", "MRN No.", "Debit Note No.")

Set Conn = New ADODB.Connection

Conn.mode = adModeReadWrite

Conn.CursorLocation = adUseClient

Conn.Open ShapeConnectString

With AccSrch

.DBConnectString = ConnectString

.SQLString = "SELECT ACCode, ACDESC FROM ACMAST WHERE RECTYPE = 'A' AND CASH = 'P' And ( GRCode='000038' Or GRCode='000008') "

.PopulateList

End With

With VnoSrch

.DBConnectString = ConnectString

.SQLString = "SELECT VNO, VNO + space(5) + ACDESC FROM PURCHASE WHERE VTYPE = '" & VoucherType & "'"

.PopulateList

End With

' With ItemSrch

' .DBConnectString = ConnectString

' .SQLString = "SELECT ItemCode, Item_Desc FROM ITEM"

' .PopulateList

' End With

Set PurchaseRst = New ADODB.Recordset

PurchaseRst.CursorLocation = adUseClient

Dim SQL As String

SQL = "SHAPE {SELECT * FROM [Purchase] WHERE Purchase.VTYPE = '" & VoucherType & "' Order By ID DESC} AS Purchase APPEND ({SELECT Ledger.ICODE, ITEM.Item_Desc, Ledger.ISIZE, Ledger.QTY, Ledger.Rate, Ledger.QTY * Ledger.Rate as Amount,Ledger.Free , Ledger.VDATE, Ledger.VNO, Ledger.VTYPE, ItemSize.Stock FROM Ledger, ITEM, ITEMSIZE WHERE (Ledger.ICODE = ITEM.ItemCode) AND (LEDGER.ICODE = ITEMSIZE.ICODE AND LEDGER.ISIZE = ITEMSIZE.ISIZE)} AS Items RELATE 'VTYPE' TO 'VTYPE','VNO' TO 'VNO') AS Items"

PurchaseRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

If PurchaseRst.RecordCount > 0 Then

Call SetFieldsValues(PurchaseRst)

Else

EmptyTable = True

End If

Call SetControls

FormLoaded = True

End Sub

Private Sub Form_Unload(Cancel As Integer)

On Error Resume Next

PurchaseRst.Close

Set PurchaseRst = Nothing

Conn.Close

Set Conn = Nothing

End Sub

Private Sub SetControls()

'Set Forms Control's status

'Called in ItemDBCtl_MoveComplete(), Form_Load(), Navigation Buttons Click()

VoucherFrame.Enabled = (ADDMode Or EditMode)

ItemFrame.Enabled = (ADDMode Or EditMode)

AddCmd.Enabled = Not (ADDMode Or EditMode)

EditCmd.Enabled = Not (EmptyTable Or ADDMode Or EditMode)

PrintCmd.Enabled = Not (EmptyTable Or ADDMode Or EditMode) And VoucherType = "PR"

PrintChk.Enabled = Not (EmptyTable Or ADDMode Or EditMode) And VoucherType = "PR"

SaveCmd.Enabled = (ADDMode Or EditMode)

CancelCmd.Enabled = (ADDMode Or EditMode)

CancelCmd.Cancel = (ADDMode Or EditMode)

DelCmd.Enabled = (Not EmptyTable) And (EditMode)

ExitCmd.Enabled = Not (ADDMode Or EditMode)

ExitCmd.Cancel = Not (ADDMode Or EditMode)

ItemGrid.ShowEditor = (ADDMode Or EditMode)

If Not (ADDMode Or EditMode) Then AccSrch.HideList

If Not (ADDMode Or EditMode) Then ItemSrch.HideList

If Not (ADDMode Or EditMode) Then VnoSrch.HideList

CashCB.Enabled = Not EditMode

If (ADDMode Or EditMode) Then

ItemGrid.Col = 1

ItemGrid.Row = IIf(ADDMode, 1, ItemGrid.Rows - 1)

End If

Set VnoSrch.BoundTextBox = IIf(EditMode, MrnTxt, Nothing)

TopCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (PurchaseRst.AbsolutePosition > 1)

PrevCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (PurchaseRst.AbsolutePosition > 1)

NextCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (PurchaseRst.AbsolutePosition < PurchaseRst.RecordCount)

LastCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (PurchaseRst.AbsolutePosition < PurchaseRst.RecordCount)

Timer1.Enabled = (ADDMode Or EditMode)

End Sub

Private Sub ItemGrid_EditorChange()

If ItemGrid.Col = 1 Then

ItemSrch.SearchValue ItemGrid.Text

End If

End Sub

Private Sub ItemGrid_EnterCell()

If Not (ADDMode Or EditMode) Then Exit Sub

If ItemGrid.Col = 1 Then

If ItemGrid.Row > (ItemGrid.FixedRows) And ItemGrid.TextMatrix(ItemGrid.Row, 1) = "" Then ItemGrid.TextMatrix(ItemGrid.Row, 1) = ItemGrid.TextMatrix(ItemGrid.Row - 1, 1)

ItemSrch.SearchValue ItemGrid.Text

Else

Call SelectText(ItemGrid.GridTextBox)

End If

End Sub

Public Sub LeaveCell()

Dim rst As ADODB.Recordset

If Not (ADDMode Or EditMode) Then Exit Sub

If ItemGrid.Col = 1 And Not ItemSrch.SelectedCompany = "" Then

ItemGrid.TextMatrix(ItemGrid.Row, 1) = Mid(ItemSrch.SelectedCompany, 1, InStr(ItemSrch.SelectedCompany, "-") - 1)

ItemGrid.TextMatrix(ItemGrid.Row, 2) = Right(ItemSrch.SelectedCompany, Len(ItemSrch.SelectedCompany) - InStr(ItemSrch.SelectedCompany, "="))

ItemGrid.TextMatrix(ItemGrid.Row, 7) = ItemSrch.UniqueCode

ElseIf ItemGrid.Col = 2 Then

'Get Stock Value of selected item

If (ItemGrid.TextMatrix(ItemGrid.Row, 7) = "" Or ItemGrid.TextMatrix(ItemGrid.Row, 2) = "") Then Exit Sub

Dim SQL As String

Set rst = New ADODB.Recordset

rst.CursorLocation = adUseClient

SQL = "SELECT * FROM ITEMSIZE WHERE ICODE = '" & ItemGrid.TextMatrix(ItemGrid.Row, 7) & "' AND ISIZE = " & ItemGrid.TextMatrix(ItemGrid.Row, 2)

rst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

If rst.RecordCount > 0 Then

ItemGrid.TextMatrix(ItemGrid.Row, 3) = IIf(IsNull(rst!STOCK), 0, rst!STOCK)

ItemGrid.TextMatrix(ItemGrid.Row, 8) = IIf(IsNull(rst!STOCK), 0, rst!STOCK)

Else

'Inserting new entry in itemsize table if not exist

rst.AddNew

rst!ICODE = ItemGrid.TextMatrix(ItemGrid.Row, 7)

rst!ISIZE = ItemGrid.TextMatrix(ItemGrid.Row, 2)

rst!STOCK = 0

rst!OPPRCHRATE = 0

rst!PRCHRATE = 0

rst.Update

ItemGrid.TextMatrix(ItemGrid.Row, 3) = 0

ItemGrid.TextMatrix(ItemGrid.Row, 8) = 0

End If

rst.Close

ElseIf ItemGrid.Col = 4 Or ItemGrid.Col = 13 Then

Dim vQty As Integer

If ADDMode Then

ItemGrid.TextMatrix(ItemGrid.Row, 3) = IIf(VoucherType = "PV", Val(ItemGrid.TextMatrix(ItemGrid.Row, 8)) + Val(ItemGrid.TextMatrix(ItemGrid.Row, 4)) + Val(ItemGrid.TextMatrix(ItemGrid.Row, 13)), Val(ItemGrid.TextMatrix(ItemGrid.Row, 8)) - Val(ItemGrid.TextMatrix(ItemGrid.Row, 4)) - Val(ItemGrid.TextMatrix(ItemGrid.Row, 13)))

Else

vQty = IIf(VoucherType = "PV", Val(ItemGrid.TextMatrix(ItemGrid.Row, 8)) - Val(ItemGrid.TextMatrix(ItemGrid.Row, 9)) - Val(ItemGrid.TextMatrix(ItemGrid.Row, 13)), Val(ItemGrid.TextMatrix(ItemGrid.Row, 8)) + Val(ItemGrid.TextMatrix(ItemGrid.Row, 9)) + Val(ItemGrid.TextMatrix(ItemGrid.Row, 13))) 'vQty = Stock +- OldQuantity +- FREE QTY

ItemGrid.TextMatrix(ItemGrid.Row, 3) = IIf(VoucherType = "PV", vQty + Val(ItemGrid.TextMatrix(ItemGrid.Row, 4)) + Val(ItemGrid.TextMatrix(ItemGrid.Row, 13)), vQty - Val(ItemGrid.TextMatrix(ItemGrid.Row, 4)) - Val(ItemGrid.TextMatrix(ItemGrid.Row, 13))) 'Stock = vQty +- NewQuantity +- FREE QTY

End If

ElseIf (ItemGrid.Col = 5 Or ItemGrid.Col = 6) Then

ItemGrid.TextMatrix(ItemGrid.Row, 6) = AmountValue(ItemGrid.TextMatrix(ItemGrid.Row, 4), ItemGrid.TextMatrix(ItemGrid.Row, 5))

Call ItemGrid_LostFocus

If TxtType.Text = "Other" Then SendKeys "{ENTER}": SendKeys "{ENTER}"

End If

If Expiry = True Or TxtType.Text = "Medicine" Then Call LeaveCellForMedicine

End Sub

Private Sub ItemGrid_LeaveCell()

On Error GoTo ErHand

LeaveCell

ErHand:

If err.Number = 0 Then Exit Sub

If err.Description = "Could not update; currently locked." Then '-2147467259

MsgBox "The record you are trying to save could not successful because required table is currently used by another module's transaction." & vbCrLf & vbCrLf & "Please finish the active transaction (Save/Cancel) in that module and then try again.", vbExclamation, "Table Locked"

rst.CancelUpdate

Call CancelCmd_Click

Exit Sub

Else

ErrHandler "PurchFrm.ItemGrid_LeaveCell"

End If

End Sub

Private Sub ItemGrid_LostFocus()

TotalLbl.Caption = Format(SumOfValues(6), "#0.#0")

End Sub

Private Sub ItemGrid_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Not EditMode Then Exit Sub

End Sub

Private Sub LastCmd_Click()

LastMove PurchaseRst

Call SetFieldsValues(PurchaseRst)

Call SetControls

End Sub

Private Sub MrnTxt_GotFocus()

SelectText MrnTxt

End Sub

Private Sub MrnTxt_Validate(Cancel As Boolean)

If Not (ADDMode) Then Exit Sub

If Len(Trim(MrnTxt)) <> 6 Then

MsgBox Label2(4).Caption & " must be of 6 character.", vbCritical, "Invalid Value"

Cancel = True

Exit Sub

End If

Dim SQL As String

Dim rst As New ADODB.Recordset

rst.CursorLocation = adUseClient

SQL = "SELECT * FROM PURCHASE WHERE VNO = '" & MrnTxt & "' AND VTYPE = '" & VoucherType & "'"

rst.Open SQL, Conn, adOpenForwardOnly, adLockReadOnly, adCmdText

If rst.RecordCount > 0 Then

MsgBox Label2(4).Caption & " is already exist. Please enter unique no.", vbCritical, "Invalid Value"

Cancel = True

Exit Sub

End If

End Sub

Private Sub NetAmtTxt_GotFocus()

SelectText NetAmtTxt

End Sub

Private Sub NetPayableAmount()

If TotalLbl.Caption = "" Then TotalLbl.Caption = 0

If CartTxt = "" Then CartTxt = 0#

If TaxTxt = "" Then TaxTxt = 0#

NetAmtTxt = Format(CSng(TotalLbl.Caption) + CartTxt + TaxTxt, "#0.#0")

End Sub

Private Sub NetAmtTxt_KeyPress(KeyAscii As Integer)

ValidateNumber KeyAscii

End Sub

Private Sub NetAmtTxt_Validate(Cancel As Boolean)

ValidateDesimal NetAmtTxt, Cancel, 2

End Sub

Private Sub NextCmd_Click()

NextMove PurchaseRst

Call SetFieldsValues(PurchaseRst)

Call SetControls

End Sub

Private Sub PrevCmd_Click()

PreviousMove PurchaseRst

Call SetFieldsValues(PurchaseRst)

Call SetControls

End Sub

Private Sub PrintCmd_Click()

On Error GoTo ErHand

Dim SQL As String

Set PrchRtrnRpt.DataSource = DE

PrchRtrnRpt.Sections("SaleCmd_Footer").Controls("lblRemark").Visible = Trim(Me.RmrkTxt) <> ""

PrchRtrnRpt.Sections("SaleCmd_Footer").Controls("lblRemark").Caption = Trim(Me.RmrkTxt)

PrchRtrnRpt.Sections("SaleCmd_Footer").Controls("Label14").Visible = Trim(Me.RmrkTxt) <> ""

If DE.PurchConn.State = adStateOpen Then DE.PurchConn.Close

DE.PurchConn.Open ShapeConnectString

If DE.rsPurchRtrnCmd.State = adStateOpen Then DE.rsPurchRtrnCmd.Close

SQL = "SHAPE {SELECT Purchase.VTYPE, Purchase.VNO, Purchase.VDATE, Purchase.ACCODE AS SUPPLIERCODE, Purchase.ACDESC AS SUPPLIER, Purchase.SUPP_INV_NO, ACMAST.ACDESC AS SUPPLIERNAME, Purchase.PROD_VALUE, Purchase.NET_PAYABLE, Purchase.CARTAGE, Purchase.TAX, Purchase.REMARK FROM Purchase LEFT JOIN ACMAST ON Purchase.ACCODE = ACMAST.ACCODE WHERE Purchase.VTYPE ='" & VoucherType & "' AND Purchase.VNO = '" & MrnTxt & "'} AS PurchRtrnCmd " & _

"APPEND ({SELECT Ledger.VTYPE, Ledger.VNO, Ledger.ICODE, ITEM.Item_Desc + SPACE(5) + ITEM.PACKING AS [Item_Desc], Ledger.QTY, Ledger.Rate, [Ledger].[Qty]*[Ledger].[Rate] AS Amount FROM Ledger LEFT JOIN ITEM ON Ledger.ICODE = ITEM.ItemCode;} AS PurchRtrnChileCmd RELATE 'VTYPE' TO 'VTYPE','VNO' TO 'VNO') AS PurchRtrnChileCmd"

DE.rsPurchRtrnCmd.Open SQL, DE.PurchConn

If PrintChk.Value = vbChecked Then PrchRtrnRpt.Show Else PrchRtrnRpt.PrintReport

ErHand:

ErrHandler "PurchaseFrm.CmdPrint"

End Sub

Private Sub SaveCmd_Click()

On Error Resume Next

If Not SavedData Then Exit Sub

Conn.CommitTrans

If ADDMode Then

VnoSrch.AddItem MrnTxt & "|" & MrnTxt & Space(5) & Trim(SuplTxt.Text)

EmptyTable = False

Else

VnoSrch.PopulateList

End If

PurchaseRst.Requery

If EditMode And Not IsEmpty(Bmark) Then PurchaseRst.Bookmark = Bmark

Call SetFieldsValues(PurchaseRst)

ADDMode = False

EditMode = False

Call SetControls

End Sub

Private Function SavedData() As Boolean

On Error GoTo ErrHand

If Not ValidateData Then Exit Function

Dim SavedRows, i As Integer

Dim SQL As String

For i = 1 To ItemGrid.Rows - 1

If Not (ItemGrid.TextMatrix(i, 1) = "" Or ItemGrid.TextMatrix(i, 2) = "" _

Or ItemGrid.TextMatrix(i, 3) = "" Or ItemGrid.TextMatrix(i, 4) = "" _

Or ItemGrid.TextMatrix(i, 5) = "" Or ItemGrid.TextMatrix(i, 6) = "" _

Or ItemGrid.TextMatrix(i, 7) = "") Then SavedRows = SavedRows + 1

Next i

If Not SavedRows > 0 Then

MsgBox "There is no items to save.", vbExclamation, "No Items"

ItemGrid.SetFocus

Exit Function

End If

Dim VoucherNo As String

Dim VoucherRst As New ADODB.Recordset

VoucherRst.CursorLocation = adUseClient

Dim PurchRst As New ADODB.Recordset

PurchRst.CursorLocation = adUseClient

Dim SRst As New ADODB.Recordset

SRst.CursorLocation = adUseClient

SRst.Open "SELECT MAX(ID) FROM PURCHASE", Conn, adOpenForwardOnly, adLockReadOnly, adCmdText

SrNo = IIf(IsNull(SRst(0)), 0, SRst(0)) + 1

VoucherNo = IIf(ADDMode, GetVoucherCode(), MrnTxt.Text)

'Saving data to purchase table

If ADDMode Then

SQL = "SELECT * FROM PURCHASE"

Else

SQL = "SELECT * FROM PURCHASE WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

End If

PurchRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

If ADDMode Then

PurchRst.AddNew

PurchRst!VType = VoucherType

PurchRst!ID = SrNo

PurchRst!Vno = VoucherNo

End If

PurchRst!vDate = VoucherDate.Value

PurchRst!AcCode = IIf(CashCB.ListIndex <= 0, "000030", SuplTxt.Tag)

PurchRst!AcDESC = Trim(SuplTxt)

PurchRst!SUPP_INV_NO = Trim(BillNoTxt)

PurchRst!SUPP_INV_DATE = IIf(BillDate.Value = "", Null, BillDate.Value)

PurchRst!PROD_VALUE = Val(TotalLbl.Caption)

PurchRst!NET_PAYABLE = Val(NetAmtTxt)

PurchRst!REMARK = Trim(RmrkTxt)

PurchRst!CARTAGE = Val(CartTxt)

PurchRst!Tax = Val(TaxTxt)

PurchRst.Update

'Saving data to voucher table

' SQL = "DELETE FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

' Conn.Execute SQL

'Update ACTRANS Table at Editing Time

SQL = "SELECT * FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

If VoucherRst.State = adStateOpen Then VoucherRst.Close

VoucherRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

Do Until VoucherRst.EOF

Call BalancePost(EditPosting, IIf(VoucherRst!DrCr = "D", VoucherRst!DrAmt, VoucherRst!CrAmt), VoucherRst!DrCr, VoucherRst!AcCode, Conn)

VoucherRst.Delete

VoucherRst.MoveNext

Loop

If VoucherRst.State = adStateOpen Then VoucherRst.Close

VoucherRst.Open "VOUCHER", Conn, adOpenKeyset, adLockOptimistic, adCmdTable

VoucherRst.AddNew

VoucherRst!sno = GetVoucherID

VoucherRst!VType = VoucherType

VoucherRst!Vno = VoucherNo

VoucherRst!vDate = VoucherDate.Value

VoucherRst!AcCode = IIf(CashCB.ListIndex <= 0, "000030", SuplTxt.Tag) 'Cash Account

VoucherRst!ACContra = "000033"

VoucherRst!DrAmt = IIf(VoucherType = "PV", 0, NetAmtTxt)

VoucherRst!CrAmt = IIf(VoucherType = "PV", NetAmtTxt, 0)

VoucherRst!DrCr = IIf(VoucherType = "PV", "C", "D")

'voucherrst!NARR

VoucherRst.Update

VoucherRst.AddNew

VoucherRst!sno = GetVoucherID

VoucherRst!VType = VoucherType

VoucherRst!Vno = VoucherNo

VoucherRst!vDate = VoucherDate.Value

VoucherRst!AcCode = "000033"

VoucherRst!ACContra = IIf(CashCB.ListIndex <= 0, "000030", SuplTxt.Tag) 'Cash Account

VoucherRst!DrAmt = IIf(VoucherType = "PV", NetAmtTxt, 0)

VoucherRst!CrAmt = IIf(VoucherType = "PV", 0, NetAmtTxt)

VoucherRst!DrCr = IIf(VoucherType = "PV", "D", "C")

'voucherrst!NARR

VoucherRst.Update

'Update ACTRANS Table

SQL = "SELECT * FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

If VoucherRst.State = adStateOpen Then VoucherRst.Close

VoucherRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

Do Until VoucherRst.EOF

Call BalancePost(ADDPosting, IIf(VoucherRst!DrCr = "D", VoucherRst!DrAmt, VoucherRst!CrAmt), VoucherRst!DrCr, VoucherRst!AcCode, Conn)

VoucherRst.MoveNext

Loop

Dim LgrRst As New ADODB.Recordset

LgrRst.CursorLocation = adUseClient

'Saving data to ledger table

If EditMode Then

SQL = "SELECT * FROM LEDGER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

LgrRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

Do Until LgrRst.EOF

SQL = "UPDATE ITEMSIZE SET STOCK = STOCK " & IIf(VoucherType = "PV", "-" & IIf(IsNull(LgrRst!free), 0, LgrRst!free) & "-", "+" & IIf(IsNull(LgrRst!free), 0, LgrRst!free) & "+") & IIf(IsNull(LgrRst!Qty), 0, LgrRst!Qty) & " WHERE ICODE = '" & LgrRst!ICODE & "' AND ISIZE = " & LgrRst!ISIZE

Conn.Execute SQL

LgrRst.MoveNext

Loop

SQL = "DELETE FROM LEDGER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"

Conn.Execute SQL

End If

If LgrRst.State = adStateOpen Then LgrRst.Close

LgrRst.Open "LEDGER", Conn, adOpenKeyset, adLockOptimistic, adCmdTable

With ItemGrid

For i = 1 To .Rows - 1

If Not (.TextMatrix(i, 1) = "" Or .TextMatrix(i, 2) = "" _

Or .TextMatrix(i, 3) = "" Or .TextMatrix(i, 4) = "" _

Or .TextMatrix(i, 5) = "" Or .TextMatrix(i, 6) = "" _

Or .TextMatrix(i, 7) = "") Then

LgrRst.AddNew

LgrRst!ID = GetLedgerID

LgrRst!VType = VoucherType

LgrRst!Vno = VoucherNo

LgrRst!vDate = VoucherDate.Value

LgrRst!ISIZE = .TextMatrix(i, 2)

LgrRst!Qty = .TextMatrix(i, 4)

LgrRst!Rate = .TextMatrix(i, 5)

LgrRst!ICODE = .TextMatrix(i, 7)

If Expiry = True And TxtType.Text = "Medicine" Then LgrRst!free = IIf(.TextMatrix(i, 13) = "", 0, .TextMatrix(i, 13))

LgrRst.Update

If Expiry = True And TxtType.Text = "Medicine" Then Conn.Execute ("insert into PurchaseDetail values('" & VoucherNo & "','" & "PV" & "','" & .TextMatrix(i, 7) & "','" & .TextMatrix(i, 11) & "','" & .TextMatrix(i, 12) & "','" & .TextMatrix(i, 4) & "','" & .TextMatrix(i, 10) & "')")

SQL = "UPDATE ITEMSIZE SET STOCK = STOCK " & IIf(VoucherType = "PV", "+", "-") & .TextMatrix(i, 4) & " WHERE ICODE = '" & .TextMatrix(i, 7) & "' AND ISIZE = " & .TextMatrix(i, 2)

Conn.Execute SQL

End If

Next i

End With

SavedData = True

Exit Function

ErrHand:

ErrHandler "Function PurchFrm.SavedData"

End Function

Private Function ValidateData() As Boolean

If CashCB.ListIndex = -1 Then

MsgBox "Please Select Cash or Credit.", vbExclamation, "Invalid Value"

CashCB.SetFocus

ElseIf CashCB.ListIndex = 1 And Trim(SuplTxt.Tag) = "" Then

MsgBox "Please Select supplier name from list.", vbExclamation, "Invalid Value"

SuplTxt.SetFocus

ElseIf Not IsDate(VoucherDate.Value) Then

MsgBox "Please enter voucher Date.", vbExclamation, "Invalid Value"

VoucherDate.SetFocus

ElseIf EditMode And MrnTxt.Tag = "" Then

MsgBox "Please select voucher no.", vbExclamation, "Invalid Value"

MrnTxt.SetFocus

Else

ValidateData = True

End If

End Function

Private Sub ItemGrid_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

If Not (ItemGrid.TextMatrix(ItemGrid.Row, 1) = "" Or _

ItemGrid.TextMatrix(ItemGrid.Row, 2) = "" Or _

ItemGrid.TextMatrix(ItemGrid.Row, 3) = "" Or _

ItemGrid.TextMatrix(ItemGrid.Row, 4) = "" Or _

ItemGrid.TextMatrix(ItemGrid.Row, 5) = "" Or _

ItemGrid.TextMatrix(ItemGrid.Row, 6) = "") Then

ItemGrid.TextMatrix(ItemGrid.Row, 0) = ItemGrid.Row

ItemGrid.CreateNewRows = True

Else

ItemGrid.CreateNewRows = False

End If

ElseIf ItemGrid.Col = 2 Or ItemGrid.Col = 3 Or ItemGrid.Col = 4 Or ItemGrid.Col = 5 Or ItemGrid.Col = 13 Then

If Not (InStr(".0123456789", Chr(KeyAscii)) > 0) And KeyAscii <> 8 Then KeyAscii = 0

End If

End Sub

Private Function SumOfValues(ByVal GridCol As Integer) As Double

Dim i, vSumVal As Double

If Not ItemGrid.Cols > GridCol Then Exit Function

For i = 1 To ItemGrid.Rows - 1

ItemGrid.TextMatrix(i, 6) = AmountValue(ItemGrid.TextMatrix(i, 4), ItemGrid.TextMatrix(i, 5))

If ItemGrid.TextMatrix(i, GridCol) = "" Then ItemGrid.TextMatrix(i, GridCol) = "0"

If Not IsNumeric(ItemGrid.TextMatrix(i, GridCol)) Then ItemGrid.TextMatrix(i, GridCol) = "0"

vSumVal = vSumVal + ItemGrid.TextMatrix(i, GridCol)

Next i

SumOfValues = Format(vSumVal, "#0.#0")

End Function

Private Function AmountValue(ByVal Rate, ByVal Qty) As String

Dim vVal As Double

If Rate = "" Then Rate = 0

If Qty = "" Then Qty = 0

If Not IsNumeric(Rate) Then Rate = 0

If Not IsNumeric(Qty) Then Qty = 0

vVal = Rate * Qty

AmountValue = Format(vVal, "#0.#0")

End Function

Private Function GetVoucherCode() As String

Dim RS As New ADODB.Recordset

Dim SQL As String

SQL = "Select Max(substring(VNO,2,len(VNO)-1)) From PURCHASE WHERE LEFT(VNO,1) = '" & IIf(CashCB.ListIndex <= 0, "C", "R") & "' AND VTYPE = '" & VoucherType & "'"

RS.Open SQL, Conn, adOpenDynamic, adLockOptimistic

GetVoucherCode = IIf(CashCB.ListIndex <= 0, "C", "R") & GetProperCode(IIf(IsNull(RS(0)), "1", RS(0) + 1), 5)

End Function

Private Sub TaxTxt_Change()

Call NetPayableAmount

End Sub

Private Sub TaxTxt_GotFocus()

SelectText TaxTxt

End Sub

Private Sub TaxTxt_KeyPress(KeyAscii As Integer)

ValidateNumber KeyAscii

End Sub

Private Sub TaxTxt_Validate(Cancel As Boolean)

ValidateDesimal TaxTxt, Cancel, 2

TaxTxt = Format(TaxTxt, "#0.#0")

End Sub

Private Sub TopCmd_Click()

TopMove PurchaseRst

Call SetFieldsValues(PurchaseRst)

Call SetControls

End Sub

Private Sub TotalLbl_Change()

Call NetPayableAmount

End Sub

Private Sub SetFieldsValues(ByVal rst As ADODB.Recordset)

On Error GoTo ErrHand

Dim rstDetail As New ADODB.Recordset

Dim ItemDetailString As String

Dim ItemString As String

Dim ItemRst As New ADODB.Recordset

ItemRst.CursorLocation = adUseClient

If Not rst.RecordCount > 0 Then Exit Sub

If rst.BOF Then rst.MoveFirst

If rst.EOF Then rst.MoveLast

CashCB.ListIndex = IIf(Left(rst!Vno, 1) = "C", 0, 1)

MrnTxt = rst!Vno

SuplTxt = rst!AcDESC

SuplTxt.Tag = rst!AcCode

VoucherDate = rst!vDate

DayLbl = Format(rst!vDate, "dddd")

BillNoTxt = IIf(IsNull(rst!SUPP_INV_NO), "", rst!SUPP_INV_NO)

BillDate = IIf(IsNull(rst!SUPP_INV_DATE), "", rst!SUPP_INV_DATE)

RmrkTxt = IIf(IsNull(rst!REMARK), "", rst!REMARK)

CartTxt = Format(IIf(IsNull(rst!CARTAGE), 0, rst!CARTAGE), "#0.#0")

TaxTxt = Format(IIf(IsNull(rst!Tax), 0, rst!Tax), "#0.#0")

TotalLbl = Format(rst!PROD_VALUE, "#0.#0")

NetAmtTxt = Format(rst!NET_PAYABLE, "#0.#0")

Set ItemRst = rst("Items").UnderlyingValue

Set rstDetail = New ADODB.Recordset

If Not ItemRst.EOF Then

rstDetail.Open "select * from PurchaseDetail Where VType='" & ItemRst!VType & "' And VNO='" & ItemRst!Vno & "'", Conn, adOpenDynamic, adLockBatchOptimistic

If Not rstDetail.EOF Then TxtType.Text = "Medicine" Else TxtType.Text = "Other"

Call TxtType_Click

End If

ItemGrid.Rows = 1

If Not ItemRst.RecordCount > 0 Then ItemGrid.AddItem "" 'Add a blank row if Item not found

Do Until ItemRst.EOF

Set rstDetail = New ADODB.Recordset

rstDetail.Open "select * from PurchaseDetail Where VType='" & ItemRst!VType & "' And VNO='" & ItemRst!Vno & "' And ProductCode='" & ItemRst!ICODE & "'", Conn, adOpenDynamic, adLockBatchOptimistic

If Not rstDetail.EOF Then

ItemDetailString = vbTab & rstDetail!BatchNo & vbTab & Format(rstDetail!ExpDate, "dd-mm-yyyy") & vbTab & Format(rstDetail!Mfgdate, "dd-mm-yyyy") & vbTab & ItemRst!free

End If

ItemString = ItemRst.AbsolutePosition & vbTab

ItemString = ItemString & ItemRst!ITEM_DESC & vbTab

ItemString = ItemString & ItemRst!ISIZE & vbTab

ItemString = ItemString & ItemRst!STOCK & vbTab

ItemString = ItemString & ItemRst!Qty & vbTab

ItemString = ItemString & ItemRst!Rate & vbTab

ItemString = ItemString & Format(ItemRst!amount, "#0.#0") & vbTab

ItemString = ItemString & ItemRst!ICODE & vbTab

ItemString = ItemString & ItemRst!STOCK & vbTab

ItemString = ItemString & ItemRst!Qty

ItemString = ItemString & ItemDetailString

ItemGrid.AddItem ItemString

ItemRst.MoveNext

Loop

ItemGrid.RefreshEditor

Exit Sub

ErrHand:

ErrHandler "Function PurchFrm.SavedData"

End Sub

Private Sub ClearFields()

CashCB.ListIndex = 0

MrnTxt = ""

SuplTxt = ""

SuplTxt.Tag = ""

VoucherDate = Date

DayLbl = ""

BillNoTxt = ""

BillDate = ""

RmrkTxt = ""

CartTxt = ""

TaxTxt = ""

TotalLbl = ""

NetAmtTxt = ""

'Call SetGridProps

Call TxtType_Click

End Sub

Private Sub vMenu_Click()

If Not EditMode Then Exit Sub

If ItemGrid.Rows > 2 Then

ItemGrid.RemoveItem ItemGrid.Row

Else

ItemGrid.Rows = 1

ItemGrid.AddItem ""

End If

ItemGrid.RefreshEditor

End Sub

Private Sub VnoSrch_ValidateBoundTextBox()

Dim BeforeSearchBmark

BeforeSearchBmark = PurchaseRst.Bookmark

PurchaseRst.MoveFirst

PurchaseRst.Find "VNO='" & MrnTxt & "'"

If PurchaseRst.EOF Then

MsgBox "Voucher No. not found.", vbCritical, "Invalid Voucher No."

PurchaseRst.Bookmark = BeforeSearchBmark

Else

Bmark = PurchaseRst.Bookmark

Call SetFieldsValues(PurchaseRst)

End If

End Sub

Private Sub DeleteVoucher()

Dim SQL As String

Dim LgrRst As New ADODB.Recordset

LgrRst.CursorLocation = adUseClient

SQL = "SELECT * FROM LEDGER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & MrnTxt & "'"

LgrRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText

Do Until LgrRst.EOF

SQL = "UPDATE ITEMSIZE SET STOCK = STOCK " & IIf(VoucherType = "PV", "-" & IIf(IsNull(LgrRst!free), 0, LgrRst!free) & "-", "+" & IIf(IsNull(LgrRst!free), 0, LgrRst!free) & "+") & IIf(IsNull(LgrRst!Qty), 0, LgrRst!Qty) & " WHERE ICODE = '" & LgrRst!ICODE & "' AND ISIZE = " & LgrRst!ISIZE

Conn.Execute SQL

LgrRst.MoveNext

Loop

'Delete from purchase

SQL = "DELETE FROM PURCHASE WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & MrnTxt & "'"

Conn.Execute SQL

'Delete from Ledger

SQL = "DELETE FROM LEDGER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & MrnTxt & "'"

Conn.Execute SQL

'Delete from Voucher

SQL = "DELETE FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & MrnTxt & "'"

Conn.Execute SQL

'Delete From Medicine Detail Table

SQL = "DELETE FROM PurchaseDetail WHERE VTYPE ='" & VoucherType & "' AND VNO = '" & MrnTxt & "'"

Conn.Execute SQL

End Sub

Private Sub VoucherDate_Validate(Cancel As Boolean)

If Not (ADDMode Or EditMode) Then Exit Sub

If Not IsInFinancialYear(VoucherDate) Then

MsgBox "This date is not of the current financial year", vbCritical, "Invalid Date"

Cancel = True

VoucherDate.SetFocus

Else

DayLbl = Format(VoucherDate, "dddd")

End If

End Sub

Private Sub ItemGrid_KeyDown(KeyCode As Integer, Shift As Integer)

If Not (ADDMode Or EditMode) Or Shift = 0 Then Exit Sub

If KeyCode = 40 Then

If Shift = vbCtrlMask Then ItemSrch.MoveNext

ElseIf KeyCode = 38 Then

If Shift = vbCtrlMask Then ItemSrch.MovePrevious

End If

End Sub

Private Sub Timer1_Timer()

On Error Resume Next

If Not ItemGrid.ShowEditor Then Exit Sub

If Not (ActiveControl.Name = "ItemGrid") Then

If ItemSrch.ListVisible Then ItemSrch.HideList

ElseIf (ActiveControl.Name = "ItemGrid") Then

If (ItemGrid.Col = 1) Then

If Not ItemSrch.ListVisible Then

ItemSrch.ShowList 490, 10

If ActiveControl.Name = "ItemGrid" Then ItemGrid.SetFocus

End If

Else

If ItemSrch.ListVisible Then ItemSrch.HideList

End If

End If

End Sub

Private Sub TxtType_Click()

With ItemSrch

.DBConnectString = ConnectString

If Expiry = False Or TxtType.Text = "Other" Then

.SQLString = "SELECT ItemCode, Item_Desc + space(3) + ' -> Packing =' + Packing FROM ITEM where IGCode <> '0001'"

Call SetGridProps

Else

.SQLString = "SELECT ItemCode, Item_Desc + space(3) + ' -> Packing =' + Packing FROM ITEM where IGCode = '0001'"

Call SetGridPropsForMedicine

End If

.PopulateList

End With

End Sub

Public Sub LeaveCellForMedicine()

If ItemGrid.Col = 1 And Not ItemSrch.SelectedCompany = "" Then

ItemGrid.TextMatrix(ItemGrid.Row, 11) = Format(Date, "dd-MMM-yyyy")

ItemGrid.TextMatrix(ItemGrid.Row, 12) = Format(Date, "dd-MMM-yyyy")

ElseIf ItemGrid.Col = 11 Then

If IsDate(ItemGrid.TextMatrix(ItemGrid.Row, 11)) = False Then MsgBox "Invalid Expire Date,Please Enter Date Like [01-JUN-2004]", vbCritical + vbDefaultButton1

ElseIf ItemGrid.Col = 12 Then

If IsDate(ItemGrid.TextMatrix(ItemGrid.Row, 12)) = False Then MsgBox "Invalid Mfg. Date,Please Enter Date Like [01-JUN-2004]", vbCritical + vbDefaultButton1

End If

End Sub

'***************************************** EnhanceMent By Sameeullah *********************

Private Sub SetGridPropsForMedicine(Optional Rows As Integer)

With ItemGrid

.Clear

.FormatString = "S No.|<Item Particulars|>Packing|>Stock|>Qty|>Rate|>Amount|IID|Stock|OldQty|>BatchNo|>Exp. Date|>Mfg. Date|>Free"

.Rows = IIf(Rows <= 1, 2, Rows)

.ColWidth(1) = TextWidth("A") * 40 'PARTICULARS

.ColWidth(2) = TextWidth("A") * 8 'Packing

.ColWidth(3) = TextWidth("A") * 8 'Stock

.ColWidth(4) = TextWidth("A") * 8 'QUANTITY

.ColWidth(5) = TextWidth("A") * 8 'RATE

.ColWidth(6) = TextWidth("A") * 15 'AMOUNT

.ColWidth(7) = TextWidth("A") * 0 'Item Code

.ColWidth(8) = TextWidth("A") * 0 'Stock

.ColWidth(9) = TextWidth("A") * 0 'Old Quantity

.ColWidth(10) = TextWidth("A") * 8 'Batch Number

.ColWidth(11) = TextWidth("A") * 10 'Exp Date

.ColWidth(12) = TextWidth("A") * 10 'Mfg Date

.ColWidth(13) = TextWidth("A") * 8 'Free

.EnableEditing(3) = False 'Stock

.EnableEditing(6) = False 'Amount

.EnableEditing(7) = False 'Item Code

.EnableEditing(8) = False 'Stock

.EnableEditing(9) = False 'Old Quantity

.NumbersOnly(2, 3, 50) = True

.NumbersOnly(3, 7) = True

.NumbersOnly(4, 4) = True

.NumbersOnly(5, 6) = True

.NumbersOnly(6, 10) = True

End With

ItemGrid.Refresh

End Sub

Private Function GetVoucherID() As String

Dim RS As New ADODB.Recordset

RS.Open "Select Max(SNO) From Voucher", Conn, adOpenDynamic, adLockOptimistic

If Not RS.EOF Then GetVoucherID = GetProperCode(IIf(IsNull(RS(0)), "1", RS(0) + 1), 6) Else GetVoucherID = GetProperCode("1", 6)

End Function

Private Function GetLedgerID() As String

Dim RS As New ADODB.Recordset

RS.Open "Select Max(ID) From LEDGER", Conn, adOpenDynamic, adLockOptimistic

If Not RS.EOF Then GetLedgerID = GetProperCode(IIf(IsNull(RS(0)), "1", RS(0) + 1), 6) Else GetLedgerID = GetProperCode("1", 6)

End Function