Class MovementDAO
java.lang.Object
ru.bgcrm.dao.CommonDAO
org.bgerp.plugin.inventoru.dao.MovementDAO
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordWhere the unit with a serial stands, and how many rows carry that serial.Nested classes/interfaces inherited from class CommonDAO
CommonDAO.ObjectExtractor<T>, CommonDAO.RecordUpdater<T> -
Field Summary
Fields inherited from class CommonDAO
con, log, SQL_AND, SQL_DELETE, SQL_DELETE_FROM, SQL_DESC, SQL_DISTINCT, SQL_FROM, SQL_GROUP_BY, SQL_INNER_JOIN, SQL_INSERT_IGNORE_INTO, SQL_INSERT_INTO, SQL_LEFT_JOIN, SQL_LIMIT, SQL_ON_DUP_KEY_UPDATE, SQL_ORDER_BY, SQL_REPLACE, SQL_SELECT, SQL_SELECT_ALL_FROM, SQL_SELECT_COUNT_ROWS, SQL_SET, SQL_UNION_ALL, SQL_UPDATE, SQL_VALUES, SQL_VALUES_1, SQL_VALUES_2, SQL_VALUES_3, SQL_VALUES_4, SQL_VALUES_5, SQL_WHERE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAppends a movement record and updates the balance accordingly.checkReservable(int itemId, int storeId, String serial) Whether the unit with this serial can be reserved on the store under the position: it stands there, under it, alone with its serial, and no other process holds it.voidcheckStoreAndItemAlive(int storeId, int itemId) Refuses a store or a position that does not exist or is deleted: stock moved there lands where no screen shows it.Not DeviceDAO.getBySerial / findDeviceIdBySerial: both take the first row, and here a second unit with the same serial — there is no unique key on it — is exactly what has to be seen.static MovementgetActiveReserveProcessId(String serial) The process holding an active reserve of the unit with this serial — a reserve of a serial tracked position names the unit, and the write-off made from it later by the 1C export takes exactly that unit.getBalanceItems(Collection<Integer> storeIds) Returns balance data for given store IDs as a flat list of maps.getBalanceList(int storeId) Returns balance for a store as list of maps with keys: itemId, itemTitle, itemTypeId, quantity, reserved.getById(long id) getFreeSerials(Collection<Integer> storeIds) Serials of the units counted on the stores that no reservation holds — what an installer can pick on the process tab, asstoreId_itemId→ serials.getListByProcess(int processId) getListByStore(int storeId, int limit) getReturnable(int storeId, int itemId, int userId) How much of a position a user may still return to a store: what was written off from it under the user's own reserves — materials issued to them for work — less the write-offs reversed since and what the user has returned already.booleanisActiveReserve(long reserveId) Returns true if the given reserve movement is still active, i.e.voidtransfer(int fromStoreId, int toStoreId, int itemId, BigDecimal qty, int processId, int userId, String serialNumber, String comment) Moves quantity from one store to another as a linked pair of movements (append-only, same pattern as reserve/unreserve and writeoff/receipt-reversal): the source row (type=transfer) debits fromStoreId and records toStoreId in related_store_id, the destination row (type=transfer_in) credits toStoreId, records fromStoreId in related_store_id, and links back via ref_movement_id — so the movement list can show "→ Title"/"← Title" on each side and the two legs of any transfer can always be found from either one.Methods inherited from class CommonDAO
deleteById, foundRows, getById, getGroupedIds, getGroupedIds, getIds, getIds, getPageLimit, getPeriodSql, lastInsertId, setPeriodParamValue, setRecordCount, update, updateColumn, updateIds, updateIds, updateOrInsert
-
Constructor Details
-
MovementDAO
-
-
Method Details
-
getById
- Throws:
SQLException
-
getReturnable
How much of a position a user may still return to a store: what was written off from it under the user's own reserves — materials issued to them for work — less the write-offs reversed since and what the user has returned already. A return used to take any quantity, and an installer put stock on his store out of thin air.- Throws:
SQLException
-
isActiveReserve
Returns true if the given reserve movement is still active, i.e. no unreserve/writeoff already references it via ref_movement_id. Used to reject a duplicate/stale unreserve request instead of silently recording a phantom cancellation on top of an already-settled reserve.- Throws:
SQLException
-
getActiveReserveProcessId
The process holding an active reserve of the unit with this serial — a reserve of a serial tracked position names the unit, and the write-off made from it later by the 1C export takes exactly that unit.- Returns:
- the process id (0 for a reserve without a process),
nullwhen none - Throws:
SQLException
-
checkReservable
Whether the unit with this serial can be reserved on the store under the position: it stands there, under it, alone with its serial, and no other process holds it.- Returns:
- why not,
nullwhen it can - Throws:
SQLException
-
getFreeSerials
Serials of the units counted on the stores that no reservation holds — what an installer can pick on the process tab, asstoreId_itemId→ serials.- Throws:
SQLException
-
findUnit
Not DeviceDAO.getBySerial / findDeviceIdBySerial: both take the first row, and here a second unit with the same serial — there is no unique key on it — is exactly what has to be seen.- Throws:
SQLException
-
getListByStore
- Throws:
SQLException
-
getListByProcess
- Throws:
SQLException
-
append
Appends a movement record and updates the balance accordingly. For "reserve" adds to reserved; for "unreserve"/"writeoff"/"return" adjusts reserved/quantity.- Parameters:
m- movement to record- Throws:
IllegalStateException- if the operation would make balance negativeSQLException
-
checkStoreAndItemAlive
Refuses a store or a position that does not exist or is deleted: stock moved there lands where no screen shows it. Shared by the movement actions — the admin receipt and correction screen and the record action make the same check.- Throws:
SQLException
-
transfer
public void transfer(int fromStoreId, int toStoreId, int itemId, BigDecimal qty, int processId, int userId, String serialNumber, String comment) throws SQLException Moves quantity from one store to another as a linked pair of movements (append-only, same pattern as reserve/unreserve and writeoff/receipt-reversal): the source row (type=transfer) debits fromStoreId and records toStoreId in related_store_id, the destination row (type=transfer_in) credits toStoreId, records fromStoreId in related_store_id, and links back via ref_movement_id — so the movement list can show "→ Title"/"← Title" on each side and the two legs of any transfer can always be found from either one. Caller is responsible for the available-quantity check and for committing.- Throws:
SQLException
-
getBalanceItems
Returns balance data for given store IDs as a flat list of maps. Each map has keys: storeId, itemId, quantity, reserved. Used for JS-driven balance hints in the process materials tab.- Throws:
SQLException
-
getBalanceList
Returns balance for a store as list of maps with keys: itemId, itemTitle, itemTypeId, quantity, reserved. Ordered by item title. Only rows with quantity > 0 or reserved > 0. itemTypeId lets the caller split consumables from asset-kind items (see ItemTypeProperties) without a second query.- Throws:
SQLException
-
fromRs
- Throws:
SQLException
-