educode_sales 0.9.76 → 0.9.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/contracts_controller.rb +77 -17
- data/app/models/educode_sales/business.rb +1 -1
- data/app/models/educode_sales/product_catalog.rb +7 -0
- data/app/views/educode_sales/contracts/_follows.html.erb +4 -31
- data/app/views/educode_sales/contracts/_list.html.erb +7 -7
- data/app/views/educode_sales/contracts/assign.html.erb +1 -1
- data/app/views/educode_sales/contracts/edit_product.html.erb +85 -0
- data/app/views/educode_sales/contracts/follow_ups.json.jbuilder +1 -0
- data/app/views/educode_sales/contracts/index.html.erb +0 -6
- data/app/views/educode_sales/contracts/new_product.html.erb +85 -0
- data/app/views/educode_sales/contracts/product_list.html.erb +232 -0
- data/app/views/educode_sales/contracts/product_list.json.jbuilder +16 -0
- data/app/views/educode_sales/contracts/show_follow_record.html.erb +169 -0
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +1 -1
- data/app/views/layouts/educode_sales/application.html.erb +4 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20230502142912_create_educode_sales_product_catalogs.rb +20 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -5
- data/app/views/educode_sales/contracts/_product_list.html.erb +0 -358
- data/app/views/educode_sales/contracts/product_list.js.erb +0 -1
@@ -0,0 +1,232 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div class="min-height-table" id="product_list">
|
3
|
+
<div style="margin: 10px 10px 10px 10px">
|
4
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
5
|
+
<div class="layui-form-item">
|
6
|
+
<div class="layui-inline">
|
7
|
+
<label class="layui-form-label">产品名称</label>
|
8
|
+
<div class="layui-input-inline">
|
9
|
+
<input type="text" name="name" class="layui-input" value="">
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="layui-inline">
|
13
|
+
<label class="layui-form-label">销售品目</label>
|
14
|
+
<div class="layui-input-inline">
|
15
|
+
<%= select_tag "item_clazz", options_for_select(EducodeSales::ProductCatalog.item_clazzs.keys), { 'lay-filter': 'item_clazz', include_blank: true , "lay-search": "" } %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="layui-inline">
|
19
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit
|
20
|
+
lay-filter="reset_prodct_form">重置
|
21
|
+
</button>
|
22
|
+
<button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit
|
23
|
+
lay-filter="search_product_form">搜索
|
24
|
+
</button>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</form>
|
28
|
+
</div>
|
29
|
+
<div id="contact_table_wraper">
|
30
|
+
<table class="layui-hide" id="contact_product_table" lay-filter="contact_product_table"></table>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<script type="text/html" id="currentTableBarProduct">
|
35
|
+
<% if can? :update_product_catalog, EducodeSales::Business %>
|
36
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit_product">编辑</a>
|
37
|
+
<% end %>
|
38
|
+
</script>
|
39
|
+
|
40
|
+
<script type="text/html" id="toolbar">
|
41
|
+
<% if can? :new_product_catalog, EducodeSales::Business %>
|
42
|
+
<a class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right" lay-event="add_product">添加产品目录</a>
|
43
|
+
<% end %>
|
44
|
+
</script>
|
45
|
+
|
46
|
+
<script>
|
47
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate', 'dropdown', 'laytpl', 'xmSelect'],
|
48
|
+
function() {
|
49
|
+
var $ = layui.jquery,
|
50
|
+
form = layui.form,
|
51
|
+
request = layui.request,
|
52
|
+
miniPage = layui.miniPage,
|
53
|
+
dropdown = layui.dropdown,
|
54
|
+
xmSelect = layui.xmSelect,
|
55
|
+
laydate = layui.laydate;
|
56
|
+
var openWH = miniPage.getOpenWidthHeight();
|
57
|
+
var data = form.val("search_form");
|
58
|
+
table = layui.table;
|
59
|
+
var cols_table = [
|
60
|
+
[{
|
61
|
+
field: 'id',
|
62
|
+
width: 60,
|
63
|
+
title: '序号',
|
64
|
+
fixed: "left"
|
65
|
+
},
|
66
|
+
{
|
67
|
+
field: 'name',
|
68
|
+
width: 120,
|
69
|
+
title: '产品名称',
|
70
|
+
},
|
71
|
+
{
|
72
|
+
field: 'item_clazz',
|
73
|
+
width: 150,
|
74
|
+
title: '销售品目',
|
75
|
+
},
|
76
|
+
{
|
77
|
+
field: 'brand',
|
78
|
+
width: 150,
|
79
|
+
title: '品牌',
|
80
|
+
},
|
81
|
+
{
|
82
|
+
field: 'specification',
|
83
|
+
width: 150,
|
84
|
+
title: '规格型号',
|
85
|
+
},
|
86
|
+
{
|
87
|
+
field: 'unit',
|
88
|
+
width: 150,
|
89
|
+
title: '单位',
|
90
|
+
},
|
91
|
+
{
|
92
|
+
field: 'param',
|
93
|
+
width: 150,
|
94
|
+
title: '参数',
|
95
|
+
},
|
96
|
+
{
|
97
|
+
field: 'source_method',
|
98
|
+
width: 150,
|
99
|
+
title: '来源方式',
|
100
|
+
},
|
101
|
+
{
|
102
|
+
field: 'supplier',
|
103
|
+
width: 150,
|
104
|
+
title: '供货商',
|
105
|
+
},
|
106
|
+
{
|
107
|
+
title: '操作',
|
108
|
+
minWidth: 100,
|
109
|
+
toolbar: '#currentTableBarProduct',
|
110
|
+
align: "center",
|
111
|
+
fixed: 'right'
|
112
|
+
}
|
113
|
+
]
|
114
|
+
]
|
115
|
+
var business_table = table.render({
|
116
|
+
elem: '#contact_product_table',
|
117
|
+
url: '/missions/contracts/product_list',
|
118
|
+
autoSort: false,
|
119
|
+
toolbar: '#toolbar',
|
120
|
+
where: {
|
121
|
+
q: data
|
122
|
+
},
|
123
|
+
defaultToolbar: [],
|
124
|
+
title: '产品目录表',
|
125
|
+
cols: cols_table,
|
126
|
+
limit: 20,
|
127
|
+
limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90],
|
128
|
+
page: true,
|
129
|
+
skin: 'line',
|
130
|
+
});
|
131
|
+
var sort = {},
|
132
|
+
search = data;
|
133
|
+
table.on('sort(contact_product_table)', function(obj) {
|
134
|
+
var data = form.val("search_form");
|
135
|
+
sort.field = obj.field;
|
136
|
+
sort.order = obj.type;
|
137
|
+
table.reload('contact_product_table', {
|
138
|
+
url: '/missions/contracts/product_list',
|
139
|
+
initSort: obj,
|
140
|
+
where: {
|
141
|
+
sort: sort,
|
142
|
+
q: search
|
143
|
+
}
|
144
|
+
});
|
145
|
+
})
|
146
|
+
// 监听搜索操作
|
147
|
+
form.on('submit(search_product_form)', function(data) {
|
148
|
+
if (search['clazz']) {
|
149
|
+
data.field['clazz'] = search['clazz']
|
150
|
+
}
|
151
|
+
search = data.field
|
152
|
+
table.reload('contact_product_table', {
|
153
|
+
url: '/missions/contracts/product_list',
|
154
|
+
page: {
|
155
|
+
curr: 1
|
156
|
+
},
|
157
|
+
where: {
|
158
|
+
q: search,
|
159
|
+
sort: sort
|
160
|
+
}
|
161
|
+
}, 'data');
|
162
|
+
return false;
|
163
|
+
});
|
164
|
+
form.on('submit(reset_prodct_form)', function(data) {
|
165
|
+
var field = data.field;
|
166
|
+
form.val('search_form', {
|
167
|
+
name: '',
|
168
|
+
item_clazz: ''
|
169
|
+
})
|
170
|
+
return false;
|
171
|
+
});
|
172
|
+
table.on('toolbar(contact_product_table)', function(obj) {
|
173
|
+
var openWH = miniPage.getOpenWidthHeight();
|
174
|
+
var content = miniPage.getHrefContent('/missions/contracts/new_product');
|
175
|
+
if (obj.event == 'add_product') {
|
176
|
+
add_product_index = layer.open({
|
177
|
+
title: '添加产品目录',
|
178
|
+
type: 1,
|
179
|
+
shade: 0.2,
|
180
|
+
maxmin: true,
|
181
|
+
shadeClose: true,
|
182
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
183
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
184
|
+
content: content,
|
185
|
+
success: function(layero, index) {
|
186
|
+
form.render('select');
|
187
|
+
}
|
188
|
+
});
|
189
|
+
$(window).on("resize", function() {
|
190
|
+
layer.full(add_product_index);
|
191
|
+
});
|
192
|
+
}
|
193
|
+
})
|
194
|
+
table.on('tool(contact_product_table)', function(obj) {
|
195
|
+
id = obj.data.id;
|
196
|
+
if (obj.event === 'edit_product') { // 监听添加操作
|
197
|
+
var content = miniPage.getHrefContent('/missions/contracts/' + id +'/edit_product');
|
198
|
+
var openWH = miniPage.getOpenWidthHeight();
|
199
|
+
edit_production_index = layer.open({
|
200
|
+
title: '编辑产品目录',
|
201
|
+
type: 1,
|
202
|
+
shade: 0.2,
|
203
|
+
maxmin: true,
|
204
|
+
shadeClose: true,
|
205
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
206
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
207
|
+
content: content,
|
208
|
+
success: function(layero, index) {
|
209
|
+
form.render('select');
|
210
|
+
}
|
211
|
+
});
|
212
|
+
$(window).on("resize", function() {
|
213
|
+
layer.full(edit_production_index);
|
214
|
+
});
|
215
|
+
}
|
216
|
+
});
|
217
|
+
});
|
218
|
+
</script>
|
219
|
+
<style>
|
220
|
+
.layui-table-tool-temp {
|
221
|
+
padding-right: 30px;
|
222
|
+
!important;
|
223
|
+
}
|
224
|
+
|
225
|
+
.layui-table-fixed .layui-table-body {
|
226
|
+
height: auto !important;
|
227
|
+
}
|
228
|
+
|
229
|
+
.layui-table-fixed.layui-hide {
|
230
|
+
display: block !important;
|
231
|
+
}
|
232
|
+
</style>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @product_catalogs do |d|
|
3
|
+
json.id d.id
|
4
|
+
json.name d.name
|
5
|
+
json.item_clazz d.item_clazz
|
6
|
+
json.brand d.brand
|
7
|
+
json.specification d.specification
|
8
|
+
json.unit d.unit
|
9
|
+
json.param d.param
|
10
|
+
json.source_method d.source_method
|
11
|
+
json.supplier d.supplier
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
json.code 0
|
16
|
+
json.count @product_catalogs.total_count
|
@@ -0,0 +1,169 @@
|
|
1
|
+
<h1 class="text-center m-t-20"><%= @follow_up.business.name %></h1>
|
2
|
+
<form class="layui-form form-value">
|
3
|
+
<div class="layui-form-item" style="padding: 10px 25px 0;">
|
4
|
+
<div class="layui-inline">
|
5
|
+
<label class="layui-form-label" style="width: 160px;">单位:</label>
|
6
|
+
<div class="layui-input-inline">
|
7
|
+
<%= @follow_up.business.department&.school&.name %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<%if @follow_up.business.number.present?%>
|
11
|
+
<div class="layui-inline">
|
12
|
+
<label class="layui-form-label" style="width: 160px;">编号:</label>
|
13
|
+
<div class="layui-input-inline">
|
14
|
+
<%= @follow_up.business.number %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<%end %>
|
18
|
+
<div class="layui-inline">
|
19
|
+
<label class="layui-form-label" style="width: 160px;">部门:</label>
|
20
|
+
<div class="layui-input-inline">
|
21
|
+
<%= @follow_up.business.department&.name %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<br>
|
25
|
+
<div class="layui-inline">
|
26
|
+
<label class="layui-form-label" style="width: 160px;">项目类型:</label>
|
27
|
+
<div class="layui-input-inline">
|
28
|
+
<%= @follow_up.clazz.name %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<div class="layui-inline">
|
32
|
+
<label class="layui-form-label" style="width: 160px;">项目阶段:</label>
|
33
|
+
<div class="layui-input-inline">
|
34
|
+
<%= @follow_up.stage.name %>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<br>
|
38
|
+
<div class="layui-inline">
|
39
|
+
<label class="layui-form-label" style="width: 160px;">招标时间:</label>
|
40
|
+
<div class="layui-input-inline">
|
41
|
+
<%= @follow_up.invitation_at.to_s %>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
<div class="layui-inline">
|
45
|
+
<label class="layui-form-label" style="width: 160px;">中标时间:</label>
|
46
|
+
<div class="layui-input-inline">
|
47
|
+
<%= @follow_up.bidded_date.to_s %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<br>
|
51
|
+
<div class="layui-inline">
|
52
|
+
<label class="layui-form-label" style="width: 160px;">签单时间:</label>
|
53
|
+
<div class="layui-input-inline">
|
54
|
+
<%= @follow_up.signed_date.to_s %>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
<div class="layui-inline">
|
58
|
+
<label class="layui-form-label" style="width: 160px;">验收时间:</label>
|
59
|
+
<div class="layui-input-inline">
|
60
|
+
<%= @follow_up.reception_at.to_s %>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<br>
|
65
|
+
<%if @follow_up.clazz_id == EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id %>
|
66
|
+
<div class="layui-inline">
|
67
|
+
<label class="layui-form-label" style="width: 160px;">服务期:</label>
|
68
|
+
<div class="layui-input-inline">
|
69
|
+
<%= @follow_up.service_start_time.to_s + "-" + @follow_up.service_end_time.to_s %>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
<%end %>
|
73
|
+
<%if @follow_up.clazz_id == EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id %>
|
74
|
+
<div class="layui-inline">
|
75
|
+
<label class="layui-form-label" style="width: 160px;">部署类型:</label>
|
76
|
+
<div class="layui-input-inline">
|
77
|
+
<%=@show_follow_recored_deployment%>
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
<% end %>
|
81
|
+
<br>
|
82
|
+
|
83
|
+
<div class="layui-inline">
|
84
|
+
<label class="layui-form-label" style="width: 160px;">中标额:</label>
|
85
|
+
<div class="layui-input-inline">
|
86
|
+
<%= @follow_up.total_amount.to_f.round(6) %>万
|
87
|
+
</div>
|
88
|
+
</div>
|
89
|
+
<div class="layui-inline">
|
90
|
+
<label class="layui-form-label" style="width: 160px;">合同额:</label>
|
91
|
+
<div class="layui-input-inline">
|
92
|
+
<%= @follow_up.actual_amount.to_f.round(6) %>万
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
<br>
|
96
|
+
<div class="layui-inline">
|
97
|
+
<label class="layui-form-label" style="width: 160px;">渠道:</label>
|
98
|
+
<div class="layui-input-inline">
|
99
|
+
<%= @follow_up.place&.name %>
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
<div class="layui-inline">
|
103
|
+
<label class="layui-form-label" style="width: 160px;">渠道分成:</label>
|
104
|
+
<div class="layui-input-inline">
|
105
|
+
<%= @follow_up.divide_amount.to_f.round(6) %>万
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
<br/>
|
109
|
+
<div class="layui-inline">
|
110
|
+
<label class="layui-form-label" style="width: 160px;">预算金额:</label>
|
111
|
+
<div class="layui-input-inline">
|
112
|
+
<%= @follow_up.budget_amount.to_f.round(6) %>万
|
113
|
+
</div>
|
114
|
+
</div>
|
115
|
+
<div class="layui-inline">
|
116
|
+
<label class="layui-form-label" style="width: 160px;">分成比例:</label>
|
117
|
+
<div class="layui-input-inline">
|
118
|
+
<%= @follow_up.divide_rate.to_f.round(2) %>%
|
119
|
+
</div>
|
120
|
+
</div>
|
121
|
+
<div class="layui-form-item">
|
122
|
+
<div class="layui-inline">
|
123
|
+
<label class="layui-form-label" style="width: 160px;">所属年度:</label>
|
124
|
+
<div class="layui-input-inline">
|
125
|
+
<%= @follow_up&.year %>年
|
126
|
+
</div>
|
127
|
+
</div>
|
128
|
+
</div>
|
129
|
+
<div class="layui-form-item">
|
130
|
+
<div class="layui-inline">
|
131
|
+
<label class="layui-form-label" style="width: 160px;">项目资金来源:</label>
|
132
|
+
<div class="layui-input-inline">
|
133
|
+
<%= @follow_up&.funding_source %>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
<div class="layui-inline">
|
137
|
+
<label class="layui-form-label" style="width: 160px;">签约单位:</label>
|
138
|
+
<div class="layui-input-inline" style="width: 300px">
|
139
|
+
<%= @follow_up.signed_department&.school&.name || '' %>
|
140
|
+
</div>
|
141
|
+
</div>
|
142
|
+
</div>
|
143
|
+
<div class="layui-form-item">
|
144
|
+
<label class="layui-form-label" style="width: 150px;">售后工程师:</label>
|
145
|
+
<div class="layui-input-inline" style="width: 350px;">
|
146
|
+
<%= @business.assign_staffs.map{|d| d.staff.user.full_name}.join("、") %>
|
147
|
+
</div>
|
148
|
+
</div>
|
149
|
+
<div class="layui-form-item layui-form-text">
|
150
|
+
<label class="layui-form-label" style="width: 160px;"><%= @trend.clazz %>:</label>
|
151
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
152
|
+
<pre><%= @trend.content %></pre>
|
153
|
+
</div>
|
154
|
+
</div>
|
155
|
+
<div class="layui-form-item layui-form-text">
|
156
|
+
<label class="layui-form-label" style="width: 160px;">时间:</label>
|
157
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
158
|
+
<pre><%= @follow_up.created_at.to_s %></pre>
|
159
|
+
</div>
|
160
|
+
</div>
|
161
|
+
<div class="layui-form-item layui-form-text">
|
162
|
+
<label class="layui-form-label" style="width: 160px;">跟进人:</label>
|
163
|
+
<div class="layui-input-block" style="padding-right: 20px;">
|
164
|
+
<pre><%= @follow_up.staff.user.real_name %></pre>
|
165
|
+
</div>
|
166
|
+
</div>
|
167
|
+
</div>
|
168
|
+
</form>
|
169
|
+
|
@@ -5,7 +5,7 @@ json.data do
|
|
5
5
|
json.stage d.stage.name
|
6
6
|
json.staff d.staff.user.real_name
|
7
7
|
json.description d.description
|
8
|
-
json.advise d.advise
|
8
|
+
json.advise d.advise || ''
|
9
9
|
json.school d.business.department&.school&.name
|
10
10
|
json.school_id d.business.department&.school&.id
|
11
11
|
json.created_at d.created_at.to_s
|
@@ -67,6 +67,10 @@
|
|
67
67
|
<dd><a href="/missions/contracts" class="<%= current?('layui-this', contracts_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/4.商机管理.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>合同管理</a>
|
68
68
|
</dd>
|
69
69
|
<% end %>
|
70
|
+
<% if can? :read_product_catalog, EducodeSales::Business %>
|
71
|
+
<dd><a href="/missions/contracts/product_list" class="<%= current?('layui-this', product_list_contracts_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/4.商机管理.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>产品目录</a>
|
72
|
+
</dd>
|
73
|
+
<% end %>
|
70
74
|
<% if can? :read, EducodeSales::MoneyPlan %>
|
71
75
|
<dd><a href="/missions/money_plans" class="<%= current?('layui-this', money_plans_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/money_plans.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>回款计划</a>
|
72
76
|
</dd>
|
data/config/routes.rb
CHANGED
@@ -29,11 +29,16 @@ EducodeSales::Engine.routes.draw do
|
|
29
29
|
get :new_follow_up
|
30
30
|
post :add_follow_ups
|
31
31
|
get :product_list
|
32
|
+
get :new_product
|
33
|
+
post :product_catalog
|
34
|
+
get :show_follow_record
|
32
35
|
end
|
33
36
|
member do
|
34
37
|
post :advise
|
35
38
|
get :assign
|
36
39
|
post :assign_staff
|
40
|
+
get :edit_product
|
41
|
+
put :update_product_catalog
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateEducodeSalesProductCatalogs < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :educode_sales_product_catalogs do |t|
|
4
|
+
t.string :name
|
5
|
+
t.integer :item_clazz
|
6
|
+
t.string :brand
|
7
|
+
t.string :specification
|
8
|
+
t.string :unit
|
9
|
+
t.text :param
|
10
|
+
t.integer :source_method
|
11
|
+
t.string :supplier
|
12
|
+
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
|
16
|
+
EducodeSales::Permission.find_or_create_by(name: '查看产品目录', subject: 'Business', action: 'read_product_catalog', clazz: 'contract')
|
17
|
+
EducodeSales::Permission.find_or_create_by(name: '添加产品目录', subject: 'Business', action: 'new_product_catalog', clazz: 'contract')
|
18
|
+
EducodeSales::Permission.find_or_create_by(name: '编辑产品目录', subject: 'Business', action: 'update_product_catalog', clazz: 'contract')
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: educode_sales
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.78
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anke1460
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -231,6 +231,7 @@ files:
|
|
231
231
|
- app/models/educode_sales/permission.rb
|
232
232
|
- app/models/educode_sales/place.rb
|
233
233
|
- app/models/educode_sales/place_area.rb
|
234
|
+
- app/models/educode_sales/product_catalog.rb
|
234
235
|
- app/models/educode_sales/project.rb
|
235
236
|
- app/models/educode_sales/recycle.rb
|
236
237
|
- app/models/educode_sales/result.rb
|
@@ -307,14 +308,17 @@ files:
|
|
307
308
|
- app/views/educode_sales/commons/show.json.jbuilder
|
308
309
|
- app/views/educode_sales/contracts/_follows.html.erb
|
309
310
|
- app/views/educode_sales/contracts/_list.html.erb
|
310
|
-
- app/views/educode_sales/contracts/_product_list.html.erb
|
311
311
|
- app/views/educode_sales/contracts/assign.html.erb
|
312
|
+
- app/views/educode_sales/contracts/edit_product.html.erb
|
312
313
|
- app/views/educode_sales/contracts/follow_ups.json.jbuilder
|
313
314
|
- app/views/educode_sales/contracts/index.html.erb
|
314
315
|
- app/views/educode_sales/contracts/index.json.jbuilder
|
315
316
|
- app/views/educode_sales/contracts/list.js.erb
|
316
317
|
- app/views/educode_sales/contracts/new_follow_up.html.erb
|
317
|
-
- app/views/educode_sales/contracts/
|
318
|
+
- app/views/educode_sales/contracts/new_product.html.erb
|
319
|
+
- app/views/educode_sales/contracts/product_list.html.erb
|
320
|
+
- app/views/educode_sales/contracts/product_list.json.jbuilder
|
321
|
+
- app/views/educode_sales/contracts/show_follow_record.html.erb
|
318
322
|
- app/views/educode_sales/customers/edit.html.erb
|
319
323
|
- app/views/educode_sales/customers/edit_department.html.erb
|
320
324
|
- app/views/educode_sales/customers/edit_follow_record.html.erb
|
@@ -657,6 +661,7 @@ files:
|
|
657
661
|
- db/migrate/20230430121335_add_permissions_for_ideas.rb
|
658
662
|
- db/migrate/20230430134710_create_educode_sales_assign_staffs.rb
|
659
663
|
- db/migrate/20230501034307_create_educode_sales_follow_up_trends.rb
|
664
|
+
- db/migrate/20230502142912_create_educode_sales_product_catalogs.rb
|
660
665
|
- lib/educode_sales.rb
|
661
666
|
- lib/educode_sales/engine.rb
|
662
667
|
- lib/educode_sales/version.rb
|
@@ -680,7 +685,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
680
685
|
- !ruby/object:Gem::Version
|
681
686
|
version: '0'
|
682
687
|
requirements: []
|
683
|
-
rubygems_version: 3.0.
|
688
|
+
rubygems_version: 3.0.0
|
684
689
|
signing_key:
|
685
690
|
specification_version: 4
|
686
691
|
summary: Summary of EducodeSales.
|