> ## Documentation Index
> Fetch the complete documentation index at: https://docs.superoffice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Samples

> Sample code for working with projects in CRMScript.

## List available sale types

```crmscript! theme={null}
SearchEngine se;
se.addFields("SaleType", "SaleType_Id,name");
print(se.executeTextTable());
```

## Check if a sale is connected to a guide

```crmscript! theme={null}
NSListAgent listAgent;
NSSaleAgent saleAgent;

NSSaleEntity sale = saleAgent.GetSaleEntity(4);

Integer saleTypeId = sale.GetSaleType().GetId();
NSSaleTypeEntity type = listAgent.GetSaleTypeEntity(saleTypeId);

if (type.GetHasGuide()) {
  printLine("This sale has a guide!");
}
else {
  printLine("This sale does not have a guide.");
}
```

## Check if a contact has open sales

```crmscript theme={null}
Bool hasOpenSales(Integer contactId) {
  NSSaleAgent saleAgent;
  DateTime from;
  DateTime to;

  NSSaleSummary summary = saleAgent.GetSummaryByContact(contactId, from.addDay(-30), to);

  return summary.GetOpen() > 0;
}

print(hasOpenSales(2).toString());
```

## Get sales for associate

To call `GetSaleList()`, we need to create the list of sale IDs 1st.

```crmscript theme={null}
String associateId = "5";
Integer[] saleIds;

SearchEngine se;
se.addField("sale.sale_id");
se.addCriteria("sale.associate_id", "OperatorEquals", associateId,"OperatorAnd", 1);
se.execute();

while (!se.eof()) {
  saleIds.pushBack(se.getField(0).toInteger());
  se.next();
}

NSSaleAgent saleAgent;
NSSale[] saleList = saleAgent.GetSaleList(saleIds);
```

### Get next due date for a given sale

```crmscript theme={null}
Integer saleId = 1;
NSSaleAgent saleAgent;
DateTime due = saleAgent.GetNextDueDate(saleId);
printLine("This sale is due " + due.toString());
```

### Get the n most urgent open sales

```crmscript theme={null}
DateTime now;
Integer[] saleIds;

SearchEngine se;
se.addField("sale.sale_id");
se.addCriteria("sale.status", "OperatorEqual", "1","OperatorAnd", 1);
se.addCriteria("sale.sale", "OperatorLt", now.toString(), "OperatorAnd", 1);
se.addOrder("sale.saledate", false);
se.setLimit(10);
se.execute();

while (!se.eof()) {
  saleIds.pushBack(se.getField(0).toInteger());
  se.next();
}

NSSaleAgent saleAgent;
NSSale[] saleList = saleAgent.GetSaleList(saleIds);
```

### Get the n potentially largest open sales

```crmscript theme={null}
String amount = "100.0";
Integer[] saleIds;

SearchEngine se;
se.addField("sale.sale_id");
se.addCriteria("sale.amount", "OperatorGt", amount,"OperatorAnd", 1);
se.addCriteria("sale.status", "OperatorEqual", "1","OperatorAnd", 1);
se.addOrder("sale.amount", false);
se.setLimit(10);
se.execute();

while (!se.eof()) {
  saleIds.pushBack(se.getField(0).toInteger());
  se.next();
}

NSSaleAgent saleAgent;
NSSale[] saleList = saleAgent.GetSaleList(saleIds);
```


## Related topics

- [Samples](/en/automation/crmscript/howto/request/samples.md)
- [TicketStaticSelectionV2](/en/api/archive-providers/reference/ticketstaticselectionv2.md)
- [TicketTransferredNotification](/en/api/archive-providers/reference/tickettransferrednotification.md)
- [TimeZones](/en/api/archive-providers/reference/timezones.md)
