# -*- coding: utf-8 -*-
require 'Date'

def get_payment_date(receiving_date, payment_id)
	(ry, rm, rd) = receiving_date.gsub(/\"/,'').split("-")
	tmp = Date.new(ry.to_i,rm.to_i,rd.to_i)
	next_month = Date.new(ry.to_i,rm.to_i,1) >> 1
	last_day_of_month = (next_month - 1).day # 末日
	
	shift_month = payment_id.to_i / 30
	shift_day      = payment_id.to_i % 30

	# 末日だったら
	if(rd.to_i == last_day_of_month)
		if(shift_day == 0)
			shift_day = -1
			shift_month -= 1
		end
		target_year = ry.to_i
		target_month = rm.to_i + shift_month + 1
		if target_month > 12
			target_month %= 12
			target_year +=1
		end
		return Date.new(target_year, target_month,shift_day).to_s
	end
	
	# 末日以外の場合
	if(rd.to_i + shift_day > last_day_of_month || rd.to_i + shift_day >= 30)
		shift_day -= (30 - rd.to_i) # 末日を30日として10日単位で減算
		shift_month += 1 # 次の月へ移る
		if( shift_day == 0 )
			shift_day = -1
			shift_month -= 1
		end
	else
		shift_day += rd.to_i
	end
	
	target_year = ry.to_i
	target_month = rm.to_i + shift_month
	if target_month > 12
		target_month %= 12
		target_year +=1
	end
	
	return Date.new(target_year,target_month,shift_day).to_s
end


def receivables_helper(encachement_date, receivable_total_price, receiving_date, payment_id)

	# 変数を囲むダブルクォートをとる
	encachement_date.gsub!(/\"/,'')
	receivable_total_price.gsub!(/\"/,'')
	receiving_date.gsub!(/\"/,'')
	payment_id.gsub!(/\"/,'')

	if encachement_date != '\N' && encachement_date != '0000-00-00'
		return '"' + encachement_date + '"'
	else
		if receivable_total_price != '0' && payment_id.to_i > 0
			return '"' + get_payment_date(receiving_date, payment_id) + '"'
		end
	end
	return '\N'
end

csv = '/tmp/receivables.csv'

open(csv) do |file|
  while line = file.gets()
    array = line.split(',')
    array[6] = receivables_helper(array[6],array[7],array[4],array[5])
    puts array.inject{|r,i| r + "," + i}
  end
end
