Skip to content

Instantly share code, notes, and snippets.

@devifr
Last active February 3, 2020 18:40
Show Gist options
  • Save devifr/a006037218fd5849e76dfb071392ede2 to your computer and use it in GitHub Desktop.
Save devifr/a006037218fd5849e76dfb071392ede2 to your computer and use it in GitHub Desktop.
@items = [
{
name: 'item-a', # Nama Item
price: 70000, # Harga Maximum
quantity: 1000, # Jumlah item yang akan dikerjakan
production_time: 8, # Lama pengerjaan dalam hari
start_time: '2017-11-14 10:00', # Mulai bidding
end_time: '2017-11-14 12:00' # Akhir bidding
},
{
name: 'item-b',
price: 50000,
quantity: 2000,
production_time: 10,
start_time: '2017-11-14 12:00',
end_time: '2017-11-14 15:00'
}
]
@submissions = [
{
name: 'Wili', # Nama Partner
bidding: {
'item-a' => {
'2017-11-14 10:00' => { # Tanggal submit
price: 65000, # Harga yang ditawarkan
production_time: 9 # Waktu pengerjaan dalam hari
},
'2017-11-14 12:00' => {
price: 68000,
production_time: 9
},
'2017-11-14 10:30' => {
price: 71000,
production_time: 9
},
'2017-11-14 12:30' => {
price: 10000,
production_time: 9
}
},
'item-b' => {
'2017-11-14 14:30' => {
price: 40000,
production_time: 9
},
'2017-11-14 12:30' => {
price: 50000,
production_time: 9
}
}
}
},
{
name: 'Lita',
bidding: {
'item-b' => {
'2017-11-14 13:30' => {
price: 45000,
production_time: 9
},
'2017-11-14 15:01' => {
price: 35000,
production_time: 9
},
'2017-11-14 12:30' => {
price: 48000,
production_time: 9
}
}
}
},
{
name: 'Sabar',
bidding: {
'item-a' => {
'2017-11-14 11:50' => {
price: 65000,
production_time: 9
},
'2017-11-14 11:30' => {
price: 68000,
production_time: 9
},
'2017-11-14 11:00' => {
price: 69000,
production_time: 9
}
}
}
},
{
name: 'Makmur',
bidding: {
'item-a' => {
'2017-11-14 12:00' => {
price: 50000,
production_time: 9
},
'2017-11-14 11:00' => {
price: 5000,
production_time: 9
}
}
}
}
]
@items.each do |itm|
get_binding = []
get_binding_new = {}
get_price = []
get_name = []
item_name = itm[:name]
item_qty = itm[:quantity]
item_max_price = itm[:price]
item_start_time = itm[:start_time]
item_end_time = itm[:end_time]
range_time = (item_start_time..item_end_time).to_a
puts "# #{item_name}: #{item_qty} - #{item_max_price}"
puts "Start Time: #{item_start_time}"
puts "End Time: #{item_end_time}"
puts "Peserta (1):"
range_time.each do |time|
@submissions.each do |data|
name = data[:name]
biddings = data[:bidding][item_name]
next if biddings.nil?
get_data = biddings[time]
next if get_data.nil?
if get_data[:price] <= item_max_price
get_binding_new[name] = {price: get_data[:price], name: name, date: time, total: (get_data[:price] * item_qty)}
end
end
end
# sort by price
sort_binding = get_binding_new.sort_by {|k,v| v[:price]}
sort_binding.each.with_index(1) do |data,i|
name_p = data.first
data_p = data.last
puts "#{i}. #{name_p} #{data_p[:date]} #{data_p[:price]} #{data_p[:total]}"
end
puts
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment