# Inquiry

**Kind:** Class

**Source:** `Pams/Web/Pams.Web/Client/app/models/sales/inquiry.model.ts` (line 36)

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

`Inquiry` represents a sales inquiry and manages inquiry cloning, order duplication, and version-related actions. It fits into the sales client model layer, where callers can create copies, create order versions, switch versions, and set the active version.

## Methods

| Method | Signature | Returns |
|---|---|---|
| `clone` | `clone(Inq: Inquiry)` | `Inquiry` |
| `duplicateVersion` | `duplicateVersion(versionIndex: number)` | `void` |
| `DuplicateOrder` | `DuplicateOrder()` | `void` |
| `switchVersion` | `switchVersion(versionIndex: number)` | `void` |
| `createNewOrderVersion` | `createNewOrderVersion()` | `void` |
| `setCurrentVersion` | `setCurrentVersion(statusId: number)` | `void` |

## Properties

| Property | Type |
|---|---|
| `InquiryContacts` | `InquiryContact[]` |
| `tabStatus` | `number` |
| `InquiryNumber` | `number` |
| `JobNo` | `string` |
| `CompanyBranchID` | `number` |
| `ResponsibleID` | `number` |
| `ClientID` | `number` |
| `SupplierID` | `number` |
| `CategoryTypeID` | `number` |
| `CategoryID` | `number` |
| `ProjectID` | `number` |
| `CategoryDescription` | `string` |
| `InquiryDate` | `Date` |
| `ProductTypeID` | `number` |
| `UserDisplayName` | `string` |
| `isUpdaating` | `boolean` |
| `reverted` | `boolean` |
| `EndUserTypeID` | `number` |
| `EndUserID` | `number` |
| `newstory` | `JobVersionStatusLog` |
| `ClientInquiryNumber` | `string` |
| `BidDueDate` | `Date` |
| `Selected` | `boolean` |
| `IsInquiryEmailedToPrincipal` | `boolean` |
| `InquiryEmailedToPrincipalDate` | `Date` |
| `Comments` | `Comment[]` |
| `InquiryTypeID` | `number` |
| `CurrentJobStatusID` | `number` |
| `Description` | `string` |
| `FileNo` | `string` |
| `CurrentJobProcess` | `JobProcess` |
| `JobVersionsList` | `JobVersion[]` |
| `CurrentJobVersion` | `JobVersion` |
| `CurrentOfferJobVersion` | `JobVersion` |
| `CurrentOrderJobVersion` | `JobVersion` |
| `BidBondDetails` | `JobGuarantee` |

## Where it refuses work

- `Inquiry` stops the work with an early return when `this.InquiryDate == null`.
- `Inquiry` stops the work with an early return when `this.BidDueDate == null`.
- `Inquiry` stops the work with an early return when `this.CurrentJobStatusID == JobStatusE.Bin`.
- `Inquiry` stops the work with an early return when `this.CurrentJobStatusID == JobStatusE.Inquiry || this.CurrentJobStatusID == JobStatusE.Of…`.

## Diagram

```mermaid
graph LR
    Inquiry[Inquiry]
    Clone[clone]
    DuplicateVersion[duplicateVersion]
    DuplicateOrder[DuplicateOrder]
    SwitchVersion[switchVersion]
    CreateOrderVersion[createNewOrderVersion]
    SetCurrentVersion[setCurrentVersion]

    Inquiry --> Clone
    Inquiry --> DuplicateVersion
    Inquiry --> DuplicateOrder
    Inquiry --> SwitchVersion
    Inquiry --> CreateOrderVersion
    Inquiry --> SetCurrentVersion
```

## Usage

```ts
declare const inquiry: Inquiry;

// Create a separate inquiry instance.
const copiedInquiry: Inquiry = inquiry.clone();

// Perform version and order actions on the current inquiry.
inquiry.duplicateVersion();
inquiry.createNewOrderVersion();
inquiry.setCurrentVersion();

// Use the method name with its declared capitalization.
inquiry.DuplicateOrder();
inquiry.switchVersion();
```

## AI Coding Instructions

- Treat `clone()` as the method for obtaining a separate `Inquiry` instance.
- Do not rely on return values from mutation methods; only `clone()` declares an `Inquiry` return type.
- Preserve the declared capitalization of `DuplicateOrder()` when calling or refactoring it.
- Connect version actions to the sales UI or state flow that selects and displays the current inquiry version.

## Used by

6 references from 6 files. Each is a place in this repository where the symbol is actually used — go read one rather than trusting an example.

### Imported by (6)

- `NewJobComponent` — `Pams/Web/Pams.Web/Client/app/components/sales/new-job/new-job.component.ts`:1
- `TagComponent` — `Pams/Web/Pams.Web/Client/app/components/shared/tag/tag.component.ts`:1
- `ValidationModel` — `Pams/Web/Pams.Web/Client/app/services/sales/date-validation-service.service.ts`:1
- `InquiryService` — `Pams/Web/Pams.Web/Client/app/services/sales/inquiry.service.ts`:1
- `LoadDataAction` — `Pams/Web/Pams.Web/Client/app/actions/job.ts`:20
- `JobState` — `Pams/Web/Pams.Web/Client/app/reducers/job.ts`:22
