import {
clearObj, parseObject,
} from "../../common/utils.mjs";
import zohoBooks from "../../zoho_books.app.mjs";
export default {
key: "zoho_books-create-salesorder",
name: "Create Sales Order",
description: "Creates a sales order. [See the documentation](https://www.zoho.com/books/api/v3/sales-order/#create-a-sales-order)",
version: "0.3.0",
type: "action",
props: {
zohoBooks,
customerId: {
propDefinition: [
zohoBooks,
"customerId",
],
description: "ID of the customer to whom the sales order has to be created.",
},
contactPersons: {
propDefinition: [
zohoBooks,
"contactPersons",
({ customerId }) => ({
customerId,
}),
],
description: "A list of contact person(s) for whom sales order has to be sent.",
optional: true,
},
date: {
propDefinition: [
zohoBooks,
"date",
],
optional: true,
},
shipmentDate: {
propDefinition: [
zohoBooks,
"shipmentDate",
],
optional: true,
},
customFields: {
propDefinition: [
zohoBooks,
"customFields",
],
optional: true,
},
placeOfSupply: {
propDefinition: [
zohoBooks,
"placeOfSupply",
],
optional: true,
},
salespersonId: {
propDefinition: [
zohoBooks,
"salespersonId",
],
optional: true,
},
merchantId: {
propDefinition: [
zohoBooks,
"merchantId",
],
optional: true,
},
gstTreatment: {
propDefinition: [
zohoBooks,
"gstTreatment",
],
optional: true,
},
gstNo: {
propDefinition: [
zohoBooks,
"gstNo",
],
optional: true,
},
isInclusiveTax: {
propDefinition: [
zohoBooks,
"isInclusiveTax",
],
optional: true,
},
lineItems: {
propDefinition: [
zohoBooks,
"lineItems",
],
},
notes: {
propDefinition: [
zohoBooks,
"notes",
],
optional: true,
},
terms: {
propDefinition: [
zohoBooks,
"terms",
],
optional: true,
},
billingAddressId: {
propDefinition: [
zohoBooks,
"billingAddressId",
],
optional: true,
},
shippingAddressId: {
propDefinition: [
zohoBooks,
"shippingAddressId",
],
optional: true,
},
crmOwnerId: {
propDefinition: [
zohoBooks,
"crmOwnerId",
],
optional: true,
},
crmCustomReferenceId: {
propDefinition: [
zohoBooks,
"crmCustomReferenceId",
],
optional: true,
},
vatTreatment: {
propDefinition: [
zohoBooks,
"vatTreatment",
],
optional: true,
},
taxTreatment: {
propDefinition: [
zohoBooks,
"taxTreatment",
],
optional: true,
},
salesorderNumber: {
propDefinition: [
zohoBooks,
"salesorderNumber",
],
optional: true,
},
referenceNumber: {
propDefinition: [
zohoBooks,
"referenceNumber",
],
optional: true,
},
isUpdateCustomer: {
propDefinition: [
zohoBooks,
"isUpdateCustomer",
],
optional: true,
},
discount: {
propDefinition: [
zohoBooks,
"discount",
],
optional: true,
},
exchangeRate: {
propDefinition: [
zohoBooks,
"exchangeRate",
],
optional: true,
},
salespersonName: {
propDefinition: [
zohoBooks,
"salespersonName",
],
optional: true,
},
notesDefault: {
propDefinition: [
zohoBooks,
"notesDefault",
],
optional: true,
},
termsDefault: {
propDefinition: [
zohoBooks,
"termsDefault",
],
optional: true,
},
taxId: {
propDefinition: [
zohoBooks,
"taxId",
],
optional: true,
},
taxAuthorityId: {
propDefinition: [
zohoBooks,
"taxAuthorityId",
],
optional: true,
},
taxExemptionId: {
propDefinition: [
zohoBooks,
"taxExemptionId",
],
optional: true,
},
taxAuthorityName: {
propDefinition: [
zohoBooks,
"taxAuthorityName",
],
optional: true,
},
taxExemptionCode: {
propDefinition: [
zohoBooks,
"taxExemptionCode",
],
optional: true,
},
avataxExemptNo: {
propDefinition: [
zohoBooks,
"taxExemptionId",
],
optional: true,
},
avataxUseCode: {
propDefinition: [
zohoBooks,
"avataxUseCode",
],
optional: true,
},
shippingCharge: {
propDefinition: [
zohoBooks,
"shippingCharge",
],
optional: true,
},
adjustment: {
propDefinition: [
zohoBooks,
"adjustment",
],
optional: true,
},
adjustmentDescription: {
propDefinition: [
zohoBooks,
"adjustmentDescription",
],
optional: true,
},
deliveryMethod: {
propDefinition: [
zohoBooks,
"deliveryMethod",
],
optional: true,
},
estimateId: {
type: "string",
label: "Estimate Id",
description: "ID of the estimate associated with the Sales Order.",
optional: true,
},
isDiscountBeforeTax: {
propDefinition: [
zohoBooks,
"isDiscountBeforeTax",
],
optional: true,
},
discountType: {
propDefinition: [
zohoBooks,
"discountType",
],
optional: true,
},
pricebookId: {
propDefinition: [
zohoBooks,
"pricebookId",
],
optional: true,
},
templateId: {
propDefinition: [
zohoBooks,
"pdfTemplateId",
],
optional: true,
},
documents: {
propDefinition: [
zohoBooks,
"documents",
],
optional: true,
},
zcrmPotentialId: {
propDefinition: [
zohoBooks,
"zcrmPotentialId",
],
optional: true,
},
zcrmPotentialName: {
propDefinition: [
zohoBooks,
"zcrmPotentialName",
],
optional: true,
},
ignoreAutoNumberGeneration: {
propDefinition: [
zohoBooks,
"ignoreAutoNumberGeneration",
],
optional: true,
},
canSendInMail: {
propDefinition: [
zohoBooks,
"canSendInMail",
],
optional: true,
},
totalFiles: {
propDefinition: [
zohoBooks,
"totalFiles",
],
optional: true,
},
doc: {
propDefinition: [
zohoBooks,
"doc",
],
optional: true,
},
},
async run({ $ }) {
const response = await this.zohoBooks.createSalesorder({
$,
params: clearObj({
ignore_auto_number_generation: this.ignoreAutoNumberGeneration,
can_send_in_mail: this.canSendInMail,
totalFiles: this.totalFiles,
doc: this.doc,
}),
data: clearObj({
customer_id: this.customerId,
contact_persons: this.contactPersons,
date: this.date,
shipment_date: this.shipmentDate,
custom_fields: parseObject(this.customFields),
place_of_supply: this.placeOfSupply,
salesperson_id: this.salespersonId,
merchant_id: this.merchantId,
gst_treatment: this.gstTreatment,
gst_no: this.gstNo,
is_inclusive_tax: this.isInclusiveTax,
line_items: parseObject(this.lineItems),
notes: this.notes,
terms: this.terms,
billing_address_id: this.billingAddressId,
shipping_address_id: this.shippingAddressId,
crm_owner_id: this.crmOwnerId,
crm_custom_reference_id: this.crmCustomReferenceId,
vat_treatment: this.vatTreatment,
tax_treatment: this.taxTreatment,
salesorder_number: this.salesorderNumber,
reference_number: this.referenceNumber,
is_update_customer: this.isUpdateCustomer,
discount: this.discount,
exchange_rate: this.exchangeRate && parseFloat(this.exchangeRate),
salesperson_name: this.salespersonName,
notes_default: this.notesDefault,
terms_default: this.termsDefault,
tax_id: this.taxId,
tax_authority_id: this.taxAuthorityId,
tax_exemption_id: this.taxExemptionId,
tax_authority_name: this.taxAuthorityName,
tax_exemption_code: this.taxExemptionCode,
avatax_exempt_no: this.avataxExemptNo,
avatax_use_code: this.avataxUseCode,
shipping_charge: this.shippingCharge && parseFloat(this.shippingCharge),
adjustment: this.adjustment && parseFloat(this.adjustment),
delivery_method: this.deliveryMethod,
estimate_id: this.estimateId,
is_discount_before_tax: this.isDiscountBeforeTax,
discount_type: this.discountType,
adjustment_description: this.adjustmentDescription,
pricebook_id: this.pricebookId,
template_id: this.templateId,
documents: parseObject(this.documents),
zcrm_potential_id: this.zcrmPotentialId,
zcrm_potential_name: this.zcrmPotentialName,
}),
});
$.export("$summary", `Salesorder successfully created with Id: ${response.salesorder.salesorder_id}`);
return response;
},
};