diff --git a/cmd/oo/invoices.go b/cmd/oo/invoices.go index 3a2ff61..8046fab 100644 --- a/cmd/oo/invoices.go +++ b/cmd/oo/invoices.go @@ -160,14 +160,14 @@ Example: func invoiceUpdateCmd() *cobra.Command { var opportunityID int64 - var description, po string + var description, po, terms string cmd := &cobra.Command{ Use: "update INVOICE_ID", - Short: "Update invoice (opportunity link, notes, PO)", + Short: "Update invoice (opportunity link, notes, PO, terms)", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - if opportunityID == 0 && !cmd.Flags().Changed("description") && !cmd.Flags().Changed("po") { - return fmt.Errorf("set --opportunity and/or --description and/or --po") + if opportunityID == 0 && !cmd.Flags().Changed("description") && !cmd.Flags().Changed("po") && !cmd.Flags().Changed("terms") { + return fmt.Errorf("set --opportunity and/or --description and/or --po and/or --terms") } c, err := newOO(cmd) if err != nil { @@ -180,6 +180,8 @@ func invoiceUpdateCmd() *cobra.Command { DescriptionSet: cmd.Flags().Changed("description"), PurchaseOrder: po, PurchaseOrderSet: cmd.Flags().Changed("po"), + Terms: terms, + TermsSet: cmd.Flags().Changed("terms"), }) if err != nil { return err @@ -191,6 +193,7 @@ func invoiceUpdateCmd() *cobra.Command { cmd.Flags().Int64Var(&opportunityID, "opportunity", 0, "CRM opportunity/deal id to link") cmd.Flags().StringVar(&description, "description", "", "invoice notes (Notizen); use \\n for line breaks") cmd.Flags().StringVar(&po, "po", "", "purchase order number") + cmd.Flags().StringVar(&terms, "terms", "", "payment terms / footer (Bedingungen)") return cmd } diff --git a/invoices.go b/invoices.go index f5c2fdd..52f88ef 100644 --- a/invoices.go +++ b/invoices.go @@ -117,13 +117,15 @@ func (c *Client) CreateInvoice(ctx context.Context, p CreateInvoiceParams) (map[ // UpdateInvoiceParams are fields for PUT /api/2.0/crm/invoice/{id}. // Loads the current invoice and merges non-zero / set fields. type UpdateInvoiceParams struct { - EntityID int64 // link to opportunity; 0 = leave unchanged - EntityType int - ContactID int64 // 0 = leave unchanged - Description string // invoice notes; empty + DescriptionSet=false keeps existing - DescriptionSet bool - PurchaseOrder string + EntityID int64 // link to opportunity; 0 = leave unchanged + EntityType int + ContactID int64 // 0 = leave unchanged + Description string // invoice notes; empty + DescriptionSet=false keeps existing + DescriptionSet bool + PurchaseOrder string PurchaseOrderSet bool + Terms string + TermsSet bool } // UpdateInvoice PUTs a full invoice body (OnlyOffice requires complete payload). @@ -206,6 +208,9 @@ func (c *Client) UpdateInvoice(ctx context.Context, id string, p UpdateInvoicePa if p.PurchaseOrderSet { body["purchaseOrderNumber"] = p.PurchaseOrder } + if p.TermsSet { + body["terms"] = p.Terms + } if p.EntityID != 0 { body["entityId"] = p.EntityID body["entityType"] = p.EntityType