# JobVersion

**Kind:** Class

**Source:** `Pams/Web/Pams.Web/Client/app/models/sales/job-version.model.ts` (line 10)

**Part of:** [Pams](subsystem-pams)

`JobVersion` is a sales-domain model that represents a version of a job. It manages job-version state related to unitized items and expiration testing through `addUnitizedItem()` and `resetExpirationTest()`.

## Methods

| Method | Signature | Returns |
|---|---|---|
| `addUnitizedItem` | `addUnitizedItem()` | `void` |
| `resetExpirationTest` | `resetExpirationTest()` | `void` |

## Properties

| Property | Type |
|---|---|
| `VersionID` | `number` |
| `VersionDate` | `Date` |
| `IsSelected` | `boolean` |
| `TypeSelected` | `boolean` |
| `UserDisplayName` | `string` |
| `AutoGeneratedSerial` | `boolean` |
| `DeliveryTerm` | `DeliveryTerm` |
| `PaymentMethod` | `PaymentMethod` |
| `Supplier` | `Supplier` |
| `VersionSerial` | `number` |
| `JobProcessID` | `number` |
| `JobVersionPrice` | `number` |
| `CurrencyID` | `number` |
| `RateToBaseCurrency` | `number` |
| `JobVersionPriceInBaseCurrency` | `number` |
| `PaymentMethodID` | `number` |
| `DeliveryTermID` | `number` |
| `JobVersionStatusID` | `number` |
| `StatusDate` | `Date` |
| `CreatedByUserID` | `number` |
| `ModifiedByUserID` | `number` |
| `ModificationDate` | `Date` |
| `CurrentJobVersionStatusLogID` | `number` |
| `DeliveryTimePeriodID` | `number` |
| `DeliveryTimePeriodCount` | `number` |
| `IsPartialShipment` | `boolean` |
| `CurrencyCode` | `string` |
| `CurrencySymbol` | `string` |
| `ClientOrderNumber` | `string` |
| `SupplierOfferNumber` | `string` |
| `OfferValidationTimePeriodID` | `number` |
| `OfferValidationTimePeriodCount` | `number` |
| `IsCurrent` | `boolean` |
| `SupplierOrderNumber` | `string` |
| `OrderActivationDate` | `Date` |
| `OrderDeliveryDate` | `Date` |
| `OrderDate` | `Date` |
| `OrderBacklog` | `number` |
| `Items` | `JobItem[]` |
| `MileStones` | `OfferMileStone[]` |
| `JobStatus` | `number` |
| `CreatedByUserName` | `string` |
| `JobVersionStatusLabel` | `string` |
| `commissionBase` | `string` |
| `JobVersionParentID` | `number` |
| `CommissionPercentage` | `number` |
| `AgreedCommissionPercentage` | `number` |
| `ContractualCommissionPercentage` | `number` |
| `commissionValidation` | `number` |
| `SupplierID` | `number` |

## Where it refuses work

- `JobVersion` stops the work with an early return when `this.JobVersionPrice <= 0`.
- `JobVersion` stops the work with an early return when `this.Items[0].Description`.
- `JobVersion` stops the work with an early return when `this.OrderActivationDate == null || this.DeliveryTimePeriodCount == null || this.Delivery…`.
- `JobVersion` stops the work with an early return when `this.OrderDeliveryDateCalculated == ""`.
- `JobVersion` stops the work with an early return when `diff < 0`.
- `JobVersion` stops the work with an early return when `this.ContractualCommissionPercentage == -1`.

## Diagram

```mermaid
graph LR
  JobVersion[JobVersion]
  AddUnitizedItem[addUnitizedItem()]
  ResetExpirationTest[resetExpirationTest()]
  UnitizedItems[Unitized item state]
  ExpirationTest[Expiration test state]

  JobVersion --> AddUnitizedItem
  JobVersion --> ResetExpirationTest
  AddUnitizedItem --> UnitizedItems
  ResetExpirationTest --> ExpirationTest
```

## Usage

```ts
import { JobVersion } from './models/sales/job-version.model';

const jobVersion = new JobVersion();

// Add an item managed by the job version.
jobVersion.addUnitizedItem();

// Clear or reinitialize expiration-test state before editing or validation.
jobVersion.resetExpirationTest();
```

## AI Coding Instructions

- Keep unitized-item changes inside `addUnitizedItem()` rather than duplicating its state changes in calling code.
- Call `resetExpirationTest()` when a workflow needs to clear expiration-test state before recalculation or validation.
- Check the model source for initialized properties and required defaults before creating a `JobVersion` instance.
- Preserve the model’s existing mutation patterns when adding sales job-version behavior.

## Relationships

- IMPORTS → `JobItem`
- IMPORTS → `OfferMileStone`
- IMPORTS → `AppSettings`
- IMPORTS → `JobVersionStatusE`
- IMPORTS → `JobStatusE`
- IMPORTS → `JobItemStatusE`

## Used by

1 reference from 1 file. Each is a place in this repository where the symbol is actually used — go read one rather than trusting an example.

### Imported by (1)

- `TempInq` — `Pams/Web/Pams.Web/Client/app/models/sales/inquiry.model.ts`:17
