<% sa = @order.shipping_address shipping_address = sa.address1 shipping_address << "<br />#{sa.address2}" if sa.address2 && sa.address2.length > 0 shipping_address << "<br />#{sa.city}, #{sa.state} #{sa.zip}" captured = @order.financial_status == 'captured' %> <input type='hidden' name='order_id' id='order_id' value='<%= @order.id %>' /> <h1>Edit Order #<%= @order.id %></h1> <table class='data'> <tr> <th><%= if @order.customer.nil? then 'Guest' else 'Customer' end %></th> <th>Shipping Address</th> <th>Order Status</th> <th>Payment Status</th> <th>Transaction ID</th> </tr> <tr> <td valign='top'> <%= "#{@order.shipping_address.first_name} #{@order.shipping_address.last_name}" %><br /> <% if @order.customer %> <a href="mailto:<%= "#{@order.customer.email}" %>"><%= "#{@order.customer.email}" %></a><br /> <% elsif @order.email %> <a href="mailto:<%= @order.email %>"><%= @order.email %></a> <% end %> <%= @order.customer ? @order.customer.phone : @order.shipping_address.phone %> </td> <td valign='top'> <%= "#{@order.shipping_address.name}" %><br /> <%= raw shipping_address %> </td> <td valign='top'> <div id='order_<%= @order.id %>_status'></div> </td> <td valign='top'> <%= @order.financial_status %> <% if @order.financial_status == 'authorized' %> for <%= number_to_currency(@order.auth_amount) %> <% end %> </td> <td valign="top"><%= @order.transaction_id %></td> </tr> </table><br /> <table class='data' width='100%'> <tr> <th>Item</th> <th>Status</th> <th>Tracking Number</th> <th>Unit Price</th> <th>Quantity</th> <th>Subtotal</th> </tr> <% @order.line_items.each do |li| %> <tr> <td> <% if li.variant.nil? || li.variant.product.nil? %> <% if li.variant.nil? %> Unknown variant <% else %> <%= li.variant.sku %> <% end %> <% else %> <a href='/admin/products/<%= li.variant.product.id %>/variants?highlight=<%= li.variant.id %>'><%= li.variant.product.title %></a><br /> <%= li.variant.sku %><br /> <%= li.variant.title %> <% end %> </td> <td ><div id='lineitem_<%= li.id %>_status' ></div></td> <td ><div id='lineitem_<%= li.id %>_tracking_number' ></div></td> <td align='right'><%= number_to_currency(li.variant.price) %></td> <td align='right'><% if captured %><%= li.quantity %><% else %><div id='lineitem_<%= li.id %>_quantity'></div><% end %></td> <td align='right' id='li_<%= li.id %>_subtotal'><%= number_to_currency(li.price) %></td> </tr> <% end %> <tr><td colspan='5' align='right'>Subtotal </td><td align='right' id='subtotal' ><%= number_to_currency(@order.subtotal ) %></td></tr> <tr><td colspan='5' align='right'>Tax </td><td align='right' id='tax' ><%= number_to_currency(@order.tax ) %></td></tr> <tr><td colspan='5' align='right'><%= @order.shipping_method ? @order.shipping_method : '' %> Shipping & Handling </td><td align='right' id='shipping'><%= number_to_currency(@order.shipping + @order.handling) %></td></tr> <tr> <td colspan='5' align='right'>Discount</td> <td align='right'> <% if captured && @order.discounts.any? %> <%= number_to_currency(@order.amount_discounted || 0) %> <% elsif @order.discounts.any? %> <%= number_to_currency(@order.discounts.first.amount_current) %> <% else %> $0.00 <% end %> </td> </tr> <tr><td colspan='5' align='right'>Total </td><td align='right' id='total' ><%= number_to_currency(@order.total ) %></td></tr> </table> <div id='message'></div> <p> <input type='button' value='< Back' onclick="window.location='/admin/orders';" /> <% if @order.financial_status == 'authorized' %> <input type='button' value='Capture Funds' onclick="capture_funds(<%= @order.id %>);" /> <input type='button' value='Void' onclick="void_order(<%= @order.id %>);" /> <% end %> <% if @order.financial_status == 'captured' %> <input type='button' value='Refund' onclick="refund_order(<%= @order.id %>);" /> <% end %> <input type='button' value='Resend Confirmation' onclick="resend_confirmation(<%= @order.id %>)" /> <input type='button' value='Print Order' onclick="print_order(<%= @order.id %>);" /> <% str = Caboose.plugin_hook('admin_edit_order_buttons', "", @order) %> <% if str %><%= raw str %><% end %> </p> <% content_for :caboose_js do %> <%= javascript_include_tag 'caboose/model/all' %> <script type='text/javascript'> function resend_confirmation(order_id) { modal.autosize("<p class='loading'>Resending confirmation..</p>"); $.ajax({ type: 'post', url: '/admin/orders/' + order_id + '/resend-confirmation', success: function(resp) { if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>"); if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>"); } }); } function capture_funds(order_id, confirm) { total = $('#total').html(); if (!confirm) { var p = $('<p/>').addClass('note confirm') .append("Are you sure you want to charge " + total + " to the customer? ") .append($('<input/>').attr('type','button').val('Yes').click(function() { capture_funds(order_id, true); })) .append(' ') .append($('<input/>').attr('type','button').val('No').click(function() { $('#message').empty(); modal.autosize(); })); modal.autosize(p); return; } modal.autosize("<p class='loading'>Capturing funds...</p>"); $.ajax({ url: '/admin/orders/' + order_id + '/capture', success: function(resp) { if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>"); if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>"); if (resp.refresh) window.location.reload(true); } }); } function void_order(order_id, confirm) { if (!confirm) { var p = $('<p/>').addClass('note confirm') .append("Are you sure you want to void this order? ") .append($('<input/>').attr('type','button').val('Yes').click(function() { void_order(order_id, true); })) .append(' ') .append($('<input/>').attr('type','button').val('No').click(function() { $('#message').empty(); modal.autosize(); })); modal.autosize(p); return; } modal.autosize("<p class='loading'>Voiding...</p>"); $.ajax({ url: '/admin/orders/' + order_id + '/void', success: function(resp) { if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>"); if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>"); if (resp.refresh) window.location.reload(true); } }); } function refund_order(order_id, confirm) { if (!confirm) { var p = $('<p/>').addClass('note confirm') .append("Are you sure you want to refund this order? ") .append($('<input/>').attr('type','button').val('Yes').click(function() { refund_order(order_id, true); })) .append(' ') .append($('<input/>').attr('type','button').val('No').click(function() { $('#message').empty(); modal.autosize(); })); modal.autosize(p); return; } modal.autosize("<p class='loading'>Refunding...</p>"); $.ajax({ url: '/admin/orders/' + order_id + '/refund', success: function(resp) { if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>"); if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>"); if (resp.refresh) window.location.reload(true); } }); } function print_order(order_id) { window.open('/admin/orders/' + order_id + '/print'); } $(document).ready(function() { <% @order.line_items.each do |li| %> new ModelBinder({ name: 'Lineitem', id: <%= li.id %>, update_url: '/admin/orders/<%= @order.id %>/line-items/<%= li.id %>', authenticity_token: '<%= form_authenticity_token %>', attributes: [ { name: 'status' , nice_name: 'Status' , type: 'select' , align: 'left' , value: <%= raw Caboose.json(li.status ) %>, text: <%= raw Caboose.json(li.status ) %>, width: 150, fixed_placeholder: false, options_url: '/admin/orders/line-item-status-options' }, { name: 'tracking_number' , nice_name: 'Tracking Number' , type: 'text' , align: 'left' , value: <%= raw Caboose.json(li.tracking_number ) %>, width: 200, fixed_placeholder: false }, { name: 'quantity' , nice_name: 'Quantity' , type: 'text' , align: 'right', value: <%= raw Caboose.json(li.quantity ) %>, width: 75, fixed_placeholder: false, before_update: function() { modal.autosize("<p class='loading'>Recalculating tax, shipping and handling...</p>"); }, after_update: function() { var order_id = $('#order_id').val(); $.ajax({ url: '/admin/orders/' + order_id + '/json', success: function(order) { $.each(order.order_line_items, function(i, li) { $('#li_' + li.id + '_subtotal').html('$' + parseFloat(li.variant.price * li.quantity).toFixed(2)); }); var sah = parseFloat(order.shipping) + parseFloat(order.handling); $('#subtotal' ).html('$' + parseFloat(order.subtotal ).toFixed(2)); $('#subtotal' ).html('$' + parseFloat(order.subtotal ).toFixed(2)); $('#tax' ).html('$' + parseFloat(order.tax ).toFixed(2)); $('#shipping' ).html('$' + parseFloat(sah ).toFixed(2)); $('#total' ).html('$' + parseFloat(order.total ).toFixed(2)); $('#order_total').val(parseFloat(order.total).toFixed(2)); $('#message').empty(); modal.autosize(); } }); } } ] }); <% end %> new ModelBinder({ name: 'Order', id: <%= @order.id %>, update_url: '/admin/orders/<%= @order.id %>', authenticity_token: '<%= form_authenticity_token %>', attributes: [ { name: 'status', nice_name: 'Status', type: 'select', value: <%= raw Caboose.json(@order.status) %>, text: <%= raw Caboose.json(@order.status) %>, width: 100, options_url: '/admin/orders/status-options', fixed_placeholder: false } ] }); }); var modal = false; $(window).load(function() { modal = new CabooseModal('95%'); }); </script> <% end %>