Compare commits

...
4 Commits
6 changed files with 78 additions and 59 deletions

No files matched your search

+8 -5
View File
@@ -45,11 +45,14 @@
</template>
<p>
<button type="button"
class="icon icon-add"
data-nested-form-add>
<%= l(:button_add) %>
</button>
<% if User.current.allowed_to?(:add_line_items, nil, global: true) %>
<button type="button"
class="icon icon-add"
data-nested-form-add>
<%= l(:button_add) %>
</button>
<% end %>
</p>
<% end %>
+38 -30
View File
@@ -1,42 +1,50 @@
<% if @issue.line_items.any? %>
<% if @issue.line_items.any? || @issue.descendant_line_items_total > 0%>
<hr/>
<div>
<p><strong><%= t :label_line_items %></strong></p>
<table class="list line-items-table">
<thead>
<tr>
<th style="width:70%;"><%= t :label_description %></th>
<th style="width:10%;"><%= t :label_qty %></th>
<th style="width:10%;"><%= t :label_price %></th>
<th style="width:10%;"><%= t :label_total %></th>
</tr>
</thead>
<% total = 0 %>
<tbody>
<% total = 0 %>
<% @issue.line_items.each do |item| %>
<% line_total = item.quantity.to_f * item.unit_price.to_f %>
<% total += line_total %>
<% if @issue.line_items.any?%>
<table class="list line-items-table">
<thead>
<tr>
<td><%= h item.description %></td>
<td><%= item.quantity %></td>
<td><%= number_to_currency(item.unit_price) %></td>
<td><%= number_to_currency(line_total) %></td>
<th style="width:70%;"><%= t :label_description %></th>
<th style="width:10%;"><%= t :label_qty %></th>
<th style="width:10%;"><%= t :label_price %></th>
<th style="width:10%;"><%= t :label_total %></th>
</tr>
<% end %>
</tbody>
</thead>
<tfoot>
<tr>
<td colspan="3" style="text-align:right;"><strong><%= t :label_total %></strong></td>
<td>
<strong><%= number_to_currency(total) %></strong>
</td>
</tr>
<% if @issue.children? %>
<tbody>
<% @issue.line_items.each do |item| %>
<% line_total = item.quantity.to_f * item.unit_price.to_f %>
<% total += line_total %>
<tr>
<td><%= h item.description %></td>
<td><%= item.quantity %></td>
<td><%= number_to_currency(item.unit_price) %></td>
<td><%= number_to_currency(line_total) %></td>
</tr>
<% end %>
</tbody>
<% end %>
<tfoot>
<% if @issue.line_items.any?%>
<tr>
<td colspan="3" style="text-align:right;"><strong><%= t :label_total %></strong></td>
<td>
<strong><%= number_to_currency(total) %></strong>
</td>
</tr>
<% end %>
<% if @issue.descendant_line_items_total > 0 %>
<tr>
<td colspan="3" style="text-align:right;"><strong><%= t :label_running_total %></strong></td>
<td>
@@ -35,13 +35,15 @@
0.00
</td>
<% unless readonly %>
<td class="actions">
<button type="button"
class="icon-only icon-del"
title="<%= l(:label_remove) %>"
data-nested-form-remove>
</button>
</td>
<% if User.current.allowed_to?(:delete_line_items, nil, global: true) %>
<% unless readonly %>
<td class="actions">
<button type="button"
class="icon-only icon-del"
title="<%= l(:label_remove) %>"
data-nested-form-remove>
</button>
</td>
<% end %>
<% end %>
</tr>
+6 -8
View File
@@ -14,7 +14,7 @@ Redmine::Plugin.register :redmine_qbo_lineitems do
name 'Redmine QBO Line Items plugin'
author 'Rick Barrette'
description 'A plugin for Redmine to extend the capabilitys of the Redmine QuickBooks Online plugin to attach billable line items to an isuue'
version '2026.4.1'
version '2026.9.0'
url 'https://github.com/rickbarrette/redmine_qbo_lineitems'
author_url 'https://barrettefabrication.com'
requires_redmine version_or_higher: '6.1.0'
@@ -29,14 +29,12 @@ Redmine::Plugin.register :redmine_qbo_lineitems do
# Add safe attributes for core models
Issue.safe_attributes :line_items_attributes
end
# Administration menu extension
Redmine::MenuManager.map :admin_menu do |menu|
menu.push :redmine_qbo_lineitems, { controller: 'items', action: 'index' },
icon: 'list',
caption: :label_items,
html: { class: 'icon icon-list' }
# Global Permissions
permission :view_line_items, { line_items: [:index, :show] }, global: true
permission :add_line_items, { line_items: [:new, :create] }, global: true
permission :edit_line_items, { line_items: [:edit, :update] }, global: true
permission :delete_line_items, { line_items: [:destroy] }, global: true
end
RedmineQboLineItems.setup
+8 -8
View File
@@ -24,18 +24,18 @@ module LineItems
])
end
# Add the line items form to the issue edit page
def view_issues_edit_notes_bottom(context = {})
return if context[:issue].closed?
context[:controller].send(:render_to_string, {
partial: 'line_items/issue_form',
locals: {
f: context[:form]
}
}
)
return unless User.current.allowed_to?(:edit_line_items, nil, global: true)
context[:controller].send(:render_to_string, { partial: 'line_items/issue_form', locals: { f: context[:form] } })
end
render_on :view_issues_show_description_bottom , partial: 'line_items/issue_line_items'
# Add the line items to the issue view page
def view_issues_show_description_bottom (context = {})
return unless User.current.allowed_to?(:view_line_items, nil, global: true)
context[:controller].send(:render_to_string, { partial: 'line_items/issue_line_items', locals: { issue: context[:issue] } })
end
end
end
+8
View File
@@ -12,10 +12,18 @@ module RedmineQboLineItems
def self.setup
unless Issue.ancestors.include?(LineItems::Patches::IssuePatch)
# Patches
Issue.prepend LineItems::Patches::IssuePatch
# Hooks
LineItems::Hooks::IssuesSaveHookListener
LineItems::Hooks::QboHookListener
LineItems::Hooks::ViewHookListener
# Administration menu extension
Redmine::MenuManager.map :admin_menu do |menu|
menu.push :redmine_qbo_lineitems, { controller: 'items', action: 'index' }, icon: 'list', caption: :label_items, html: { class: 'icon icon-list' }
end
end
end
end