Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Components - allocadence #14221

Merged
merged 4 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,343 @@
import { ConfigurationError } from "@pipedream/platform";
import allocadence from "../../allocadence.app.mjs";
import { POSTAGE_ACCOUNT_OPTIONS } from "../../common/constants.mjs";
import { parseObject } from "../../common/utils.mjs";

export default {
key: "allocadence-create-customer-order",
name: "Create Customer Order",
description: "Creates a new customer order. [See the documentation](https://docs.allocadence.com/#tag/customer_order/paths/~1customer-orders/post)",
version: "0.0.1",
type: "action",
props: {
allocadence,
orderNumber: {
type: "string",
label: "Order Number",
description: "Order number for the customer order.",
optional: true,
},
clientId: {
type: "integer",
label: "Client Id",
description: "Id of the client that the customer order is for.",
optional: true,
},
clientName: {
type: "string",
label: "Client Name",
description: "Name of the client that the customer order is for. **Ignored if clientId is provided and is nonzero.**",
optional: true,
},
customerId: {
type: "integer",
label: "Customer Id",
description: "Id of the customer. If none is provided, will attempt to find an existing customer based on the other customer fields and shipping address. Other fields not used if id is provided.",
optional: true,
},
title: {
type: "string",
label: "Customer Title",
description: "The title of the customer.",
optional: true,
},
name: {
type: "string",
label: "Customer Name",
description: "A combination of name and surname is required if the customer is new.",
optional: true,
},
surname: {
type: "string",
label: "Customer Surname",
description: "A combination of name and surname is required if the customer is new.",
optional: true,
},
email: {
type: "string",
label: "Customer Email",
description: "The email of the customer.",
optional: true,
},
customerCompany: {
type: "string",
label: "Customer Company",
description: "The company of the customer.",
optional: true,
},
accountNumber: {
type: "string",
label: "Customer Account Number",
description: "Will only match a customer on this field if provided.",
optional: true,
},
shippingAddressId: {
type: "integer",
label: "Shipping Address Id",
description: "Id of the shipping address. **Other Shipping fields will not be used if provided.**",
optional: true,
},
shippingAddressCode: {
type: "string",
label: "Shipping Address Code",
description: "Used to find an existing address. Other fields not used if an address is successfully found.",
optional: true,
},
shippingAddressCompany: {
type: "string",
label: "Shipping Address Company",
description: "The company of the shipping address.",
optional: true,
},
shippingAddressName: {
type: "string",
label: "Shipping Address Name",
description: "The name of the shipping address.",
optional: true,
},
shippingAddressline1: {
type: "string",
label: "Shipping Address Line 1",
description: "The shipping address line 1.",
optional: true,
},
shippingAddressline2: {
type: "string",
label: "Shipping Address Line 2",
description: "The shipping address line 2.",
optional: true,
},
shippingAddressline3: {
type: "string",
label: "Shipping Address Line 3",
description: "The shipping address line 3.",
optional: true,
},
jcortes marked this conversation as resolved.
Show resolved Hide resolved
shippingAddressCity: {
type: "string",
label: "Shipping Address City",
description: "The city of the shipping address.",
optional: true,
},
shippingAddressState: {
type: "string",
label: "Shipping Address State",
description: "The state of the shipping address.",
optional: true,
},
shippingAddressZip: {
type: "string",
label: "Shipping Address Zip",
description: "The zip of the shipping address.",
optional: true,
},
shippingAddressCountryCode: {
type: "string",
label: "Shipping Address Country Code",
description: "The country code of the shipping address. [See the ISO 3166 codes](https://www.iban.com/country-codes).",
optional: true,
},
shippingAddressPhone: {
type: "string",
label: "Shipping Address Phone",
description: "The phone of the shipping address.",
optional: true,
},
sameAsShipping: {
type: "boolean",
label: "Same As Shipping",
description: "True if the billing address is the same as the shipping address.",
reloadProps: true,
optional: true,
},
shipFromWarehouseId: {
type: "string",
label: "Ship From Warehouse Id",
description: "Id of the warehouse the ordered items will be allocated from. If no warehouse parameters are given, then the user's current warehouse will be used.",
optional: true,
},
jcortes marked this conversation as resolved.
Show resolved Hide resolved
shipFromWarehouseName: {
type: "string",
label: "Ship From Warehouse Name",
description: "Name of the warehouse the ordered items will be allocated from. Ignored if warehouseId is provided.",
optional: true,
},
shipVia: {
type: "string",
label: "Ship Via",
description: "Code of the carrier or service to use for shipping.",
optional: true,
},
postageAccount: {
type: "string",
label: "Postage Account",
description: "Who to bill for shipping.",
options: POSTAGE_ACCOUNT_OPTIONS,
optional: true,
},
items: {
type: "string[]",
label: "Items",
description: "An array of objects of ordered items. **Example: {\"itemId\": \"123\", \"sku\": \"SKU123\", \"quantity\": 1}** [See the documentation](https://docs.allocadence.com/#tag/customer_order/paths/~1customer-orders/post) fro further information.",
optional: true,
},
jcortes marked this conversation as resolved.
Show resolved Hide resolved
},
async additionalProps() {
const props = {};

if (!this.sameAsShipping) {
props.billingAddressId = {
type: "integer",
label: "Billing Address Id",
description: "Id of the billing address. **Other Billing fields will not be used if provided.**",
optional: true,
};
props.billingAddressCode = {
type: "string",
label: "Billing Address Code",
description: "Used to find an existing address. Other fields not used if an address is successfully found.",
optional: true,
};
props.billingAddressCompany = {
type: "string",
label: "Billing Address Company",
description: "The company of the billing address.",
optional: true,
};
props.billingAddressName = {
type: "string",
label: "Billing Address Name",
description: "The name of the billing address.",
optional: true,
};
props.billingAddressline1 = {
type: "string",
label: "Billing Address Line 1",
description: "The billing address line 1.",
optional: true,
};
props.billingAddressline2 = {
type: "string",
label: "Billing Address Line 2",
description: "The billing address line 2.",
optional: true,
};
props.billingAddressline3 = {
type: "string",
label: "Billing Address Line 3",
description: "The billing address line 3.",
optional: true,
};
jcortes marked this conversation as resolved.
Show resolved Hide resolved
props.billingAddressCity = {
type: "string",
label: "Billing Address City",
description: "The city of the billing address.",
optional: true,
};
props.billingAddressState = {
type: "string",
label: "Billing Address State",
description: "The state of the billing address.",
optional: true,
};
props.billingAddressZip = {
type: "string",
label: "Billing Address Zip",
description: "The zip of the billing address.",
optional: true,
};
props.billingAddressCountryCode = {
type: "string",
label: "Billing Address Country Code",
description: "The country code of the billing address. [See the ISO 3166 codes](https://www.iban.com/country-codes).",
optional: true,
};
props.billingAddressPhone = {
type: "string",
label: "Billing Address Phone",
description: "The phone of the billing address.",
optional: true,
};
}
jcortes marked this conversation as resolved.
Show resolved Hide resolved
return props;
},
async run({ $ }) {
if (!this.customerId &&
!this.title &&
!this.name &&
!this.surname &&
!this.email &&
!this.customerCompany &&
!this.accountNumber) {
throw new ConfigurationError("You must provide at least 'Customer Id', 'Customer Title', 'Customer Name', 'Customer Surname', 'Customer Email', 'Customer Company' or 'Customer Account Number'.");
}

if (!this.shippingAddressId &&
!this.shippingAddressline1 &&
!this.shippingAddressCountryCode) {
throw new ConfigurationError("You must provide at least 'Shipping Address Id' or 'Shipping Address Line1' and 'Shipping Address Country Code'.");
}

if (!this.sameAsShipping &&
!this.billingAddressId &&
!this.billingAddressline1 &&
!this.billingAddressCountryCode) {
throw new ConfigurationError("When 'Same As Shipping' is set **False** you must provide at least 'Billing Address Id' or 'Billing Address Line1' and 'Billing Address Country Code'.");
}

const response = await this.allocadence.createCustomerOrder({
$,
data: {
orderNumber: this.orderNumber,
clientId: this.clientId,
clientName: this.clientName,
customer: {
id: this.customerId,
title: this.title,
name: this.name,
surname: this.surname,
email: this.email,
company: this.customerCompany,
accountNumber: this.accountNumber,
},
shippingAddress: {
id: this.shippingAddressId,
code: this.shippingAddressCode,
company: this.shippingAddressCompany,
name: this.shippingAddressName,
line1: this.shippingAddressline1,
line2: this.shippingAddressline2,
line3: this.shippingAddressline3,
city: this.shippingAddressCity,
state: this.shippingAddressState,
zip: this.shippingAddressZip,
countryCode: this.shippingAddressCountryCode,
phone: this.shippingAddressPhone,
},
billingAddress: {
sameAsShipping: this.sameAsShipping,
id: this.billingAddressId,
code: this.billingAddressCode,
company: this.billingAddressCompany,
name: this.billingAddressName,
line1: this.billingAddressline1,
line2: this.billingAddressline2,
line3: this.billingAddressline3,
city: this.billingAddressCity,
state: this.billingAddressState,
zip: this.billingAddressZip,
countryCode: this.billingAddressCountryCode,
phone: this.billingAddressPhone,
},
jcortes marked this conversation as resolved.
Show resolved Hide resolved
shipFromWarehouseId: this.shipFromWarehouseId,
shipFromWarehouseName: this.shipFromWarehouseName,
shipVia: this.shipVia,
postageAccount: this.postageAccount,
items: parseObject(this.items),
},
jcortes marked this conversation as resolved.
Show resolved Hide resolved
});

$.export("$summary", `Successfully created customer order with ID ${response.id}`);
return response;
},
};
Loading
Loading