Repository navigation
feat: TurboQuote list sorting and filters, quote summary, open quotes and custom line item images - #136
Open
amitsharma-turbodocx wants to merge 3 commits into
Open
feat: TurboQuote list sorting and filters, quote summary, open quotes and custom line item images#136amitsharma-turbodocx wants to merge 3 commits into
amitsharma-turbodocx wants to merge 3 commits into
Conversation
… and custom line item images All six SDKs (JS, Python, Go, PHP, Java, Ruby): - sortBy / sortDirection on every TurboQuote list; quote list filters for several companies and currencies, the "expired" status, created by, created by API keys, Valid until window and dates, and the summary currency; several billing frequencies / currencies on products and bundles, several companies on contacts - getQuoteSummary, listQuoteCreators, getNextQuoteNumber, getCompanyOpenQuotes, getContactOpenQuotes, getProductQuoteImages, and custom line item images (getQuoteLineItemImages, getLineItemImages, addLineItemImages, reorderLineItemImages, removeLineItemImage) - an optional name on the four duplicate calls; company email; resetProductPricing on updatePriceBook; new response fields (statusCounts, summary, isExpired, lineItemCount, overrideCount, itemCount, billingTotals, company.contactCount) - the refused deletes (sent / accepted quote, company or contact with open quotes, last contact, default price book) documented on the delete methods - README sections, openapi.yaml paths, PHP CHANGELOG and the parity rule Closes #133 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Quote approvals are not released, so open quotes are described as draft or sent, and the status counts no longer expose a pending-approval count. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
amitsharma-turbodocx
marked this pull request as ready for review
October 20, 2026 15:48
…Java webhook test - QuoteStatus in JS, Python, Go, PHP and Ruby lists draft, sent, accepted, declined and voided only. Tests check the exact set. - SendQuote's Go doc comment describes sending for signature. - Parity rule: unreleased quote features are not wrapped, documented or typed. - Java WebhookSignatureVerifierTest read the clock twice, so it failed when a second ticked over between signing and verifying. It reads it once now. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #133
TurboQuote catches up with the API: list sorting, more list filters, the quote summary / creators / next-number reads, open quotes, product quote images and images on custom line items. Every new parameter is optional, so existing calls send exactly what they sent before.
What's new (all six SDKs)
sortBy+sortDirection(asc|desc).updatedOn·createdOn·total·validUntil·quoteNumbername·listPrice·createdOnname·discountPercent·overrideCount·validFrom·validTo·createdOnname·itemCount·totalListPrice·totalFinalPrice·createdOnname·contactCount·lastActivityDatename·createdOnname·usageCountcompanyIds,currencies(currencytakes one or several),expiredinstatuses,createdBy,createdByApiKeys,validUntilWindow/validUntilFrom/validUntilTo,summaryCurrency.statusCountsandsummary.isExpired,isSignatureExpiredandlineItemCount.billingFrequency/currencyvalues, bundles severalcurrencyvalues, contacts severalcompanyIds.getQuoteSummary,listQuoteCreators,getNextQuoteNumber,getCompanyOpenQuotes,getContactOpenQuotes,getProductQuoteImages, and custom line item images (getQuoteLineItemImages,getLineItemImages,addLineItemImages,reorderLineItemImages,removeLineItemImage). The parity count goes from 68 to 79.duplicateQuote/duplicateProduct/duplicatePriceBook/duplicateBundle.emailon companies (create, update, bulk).resetProductPricingonupdatePriceBook.overrideCount; bundleitemCountandbillingTotals; companyemail;company.contactCounton a company's contact list.openapi.yamlpaths, the PHP CHANGELOG and the parity rule.Per language
QuoteListStatusFilter/QuoteValidUntilWindow.OneOrMany<T>for the multi-value filters.HttpClient.put.name=keyword on the duplicates.HttpClient.put.BillingFrequencies/CurrencyCodesnext to the existing single fields, sent through aquery:"…"tag, so no existing field changes type.DuplicateOptions,UpdateCompanyRequest.ClearEmail(), andPut/PostImagesMultiparton the HTTP client.SortAsc/SortDesc,QuoteSortBy*,ValidUntil*,QuoteListStatusExpired.string|arrayfor the multi-value filters.QuoteSummary,QuoteStatusCounts,QuoteCreator,NextQuoteNumber,OpenQuotesResponseandLineItemImage.HttpClient::put;FileTypeDetectornow recognises PNG and JPEG.(id, name)overloads for the duplicates.ListCompanyContactsOptionsextendsPaginationParams, so the existinglistCompanyContacts(companyId, PaginationParams)signature stays.HttpClient.putanddelete(path, Type).name:keyword on the duplicates.HttpClient#put; the image parts helper is shared with product images.Tests (written first and run to fail, then the code was added; all suites in Docker for Go, PHP, Java, Ruby and Python):
tsc --noEmitcleango test ./...ok,go vetcleanThey cover:
{ name }, an unnamed one sends no body;nullcompany email on PATCH;resetProductPricing;CANNOT_DELETE_SENT_QUOTEreaching the conflict error class with its code.Notes for release
ListCompanyContactsnow takes*ListCompanyContactsOptionsinstead of*PaginationParams(sameLimit/Offset/Queryfields plus the sort). Callers that passnilare unaffected; callers that build&PaginationParams{…}change the type name.draft,sent,accepted,declined,voided(JS/Python types, Go constants, PHP enum, Ruby constants). Code that referenced the removed value no longer compiles or type-checks.CI fix: the Java
WebhookSignatureVerifierTest.stringBodyOverloadUsesDefaultToleranceread the clock twice and failed when a second ticked over between signing and verifying; it now reads it once.MAX_IMAGES_EXCEEDED). A product that already has more keeps them until an image is added, and a duplicate copies the first three. The SDKs never capped the count client-side, so no code changes; the docs say 3.🤖 Generated with Claude Code