##=require skr/vendor class Skr.Screens.Invoice.Payment extends Lanes.React.Component statics: onPayment: (modal, ev) -> {invoice, payment} = modal.refs.body payment.save(include: 'invoice').then (pymnt) -> invoice.amount_paid = invoice.amount_paid.minus(pymnt.amount) modal.hide() unless pymnt.hasErrors display: (viewport, invoice) -> viewport.displayModal title: "Accept Payment", size: 'lg', onCancel: (m) -> unsaved = invoice.payments.filter (pymnt) -> not pymnt.isNew() invoice.payments.remove(unsaved) m.hide() onOk: @onPayment, className: "invoice-payment" invoice: invoice body: Skr.Screens.Invoice.Payment getInitialState: -> type: 'credit-card' dataObjects: invoice: 'props' payment: -> payment = @props.invoice.payments.find (pymnt) -> pymnt.isNew() payment ||= this.props.invoice.payments.add({ amount: @props.invoice.open_amount }) payment onEnter: -> @props.modal.onButton() onTypeChange: (ev) -> @setState(type: ev.target.value) visitPayment: (payment) -> @props.modal.hide() Lanes.Screens.Definitions.all.get('payments') .display(props: {payment: payment}) PreviousPayments: (props) -> previous = props.invoice.payments.filter (pymnt) -> not pymnt.isNew() return null if _.isEmpty(previous) ID Date Info Amount {for pym in previous {pym.visible_id} {Lanes.u.format.shortDateTime(pym.date)} {pym.describe()} {Lanes.u.format.currency(pym.amount)} } NewPayment: (props) -> {invoice} = props return null if invoice.isPaidInFull()
Cash Credit Card { if @state.type is 'credit-card'} Lanes.u.format.currency(@total) } model={invoice} align='right' /> Lanes.u.format.currency(@amount_paid) } model={invoice} align='right' /> Lanes.u.format.currency(@amount) } onEnter={@onEnter} name='amount' align='right' model={@payment} />
render: -> <@PreviousPayments invoice={@invoice} /> <@NewPayment invoice={@invoice} />