示例#1
0
 def get_initial(self):
     data = super(CreateEnd, self).get_initial()
     pk_contract = self.kwargs['pk_contract']
     pk_delivery = self.kwargs['pk_delivery']
     item_delivery = ItemDelivery.objects.get(pk=pk_delivery)
     contract = Contract.objects.get(pk=pk_contract)
     data['item_delivery'] = item_delivery
     data['contract'] = contract
     data['distance_delivery'] = round(item_delivery.distance, 2)
     data['distance_collect'] = round(
         get_distance(get_addressable(contract.driver),
                      get_addressable(item_delivery)), 2)
     data['distance_total'] = round(
         data['distance_delivery'] + data['distance_collect'], 2)
     data['collect_time'] = utc_to_local(
         datetime.datetime.now()) + datetime.timedelta(
             seconds=get_route_time(get_addressable(contract.driver),
                                    get_addressable(item_delivery),
                                    contract.transport))
     data['delivery_time'] = data['collect_time'] + datetime.timedelta(
         seconds=get_route_time(get_addressable(item_delivery),
                                get_addressable(item_delivery.target),
                                contract.transport))
     data['cost_travel'] = Money(
         round(
             get_cost_travel(contract.transport.km_l,
                             data['distance_total'], contract.driver.type),
             2), 'BRL')
     data['start_travel_time'] = utc_to_local(datetime.datetime.now())
     return data
示例#2
0
 def check_delivered(self, **kwargs):
     travels = Travel.objects.filter(
         contract__player=self.request.user.player, is_delivered=False)
     for travel in travels:
         self.update_driver_position(travel, **kwargs)
         if utc_to_local(datetime.datetime.now()) >= travel.delivery_time:
             travel.is_collected = True
             travel.is_delivered = True
             driver = travel.contract.driver
             driver.status_driver = STATUS_DRIVERS[1][0]
             driver.lat = travel.item_delivery.target.lat
             driver.lng = travel.item_delivery.target.lng
             driver.address = travel.item_delivery.target.address
             driver.save()
             travel.save()
             player = self.request.user.player
             player.credits = player.credits + travel.item_delivery.amount_receivable
             player.credits = player.credits - travel.cost_travel
             player.save()
             notification = EmailNotification()
             notification.player = player
             notification.message = "Delivery #{} foi entregue por {} em {}".format(
                 str(travel.pk), str(travel.contract.driver.name),
                 str(travel.item_delivery.target.address))
             notification.save()
示例#3
0
def check_recurrency_loan(request, loan):
    now = utc_to_local(datetime.datetime.now())
    if now >= loan.recurrency.next:
        change_next_recurrency(loan.recurrency, **{'months': 1})
        pay(request, loan.value_installment)
        notification = EmailNotification()
        notification.player = loan.player
        notification.message = "The monthly fee for the loan of {} was paid in the amount of R$ {}".format(
            str(loan.loan_value), str(loan.value_installment))
        notification.save()
示例#4
0
def check_recurrency_driver(request, driver):
    now = utc_to_local(datetime.datetime.now())
    if now >= driver.recurrency.next:
        change_next_recurrency(driver.recurrency, **{'weeks': 1})
        pay(request, driver.salary)
        notification = EmailNotification()
        notification.player = driver.contract.player
        notification.message = "{} salary was paid in the amount of R$ {}".format(
            str(driver.name), str(driver.salary))
        notification.save()
示例#5
0
def check_recurrency_contract(request, contract):
    now = utc_to_local(datetime.datetime.now())
    if now >= contract.recurrency.next:
        change_next_recurrency(contract.recurrency, **{'years': 1})
        pay(request, contract.bonus)
        notification = EmailNotification()
        notification.player = contract.player
        notification.message = "A bonus was paid to {} in the amount of R$ {}".format(
            str(contract.driver.name), str(contract.bonus))
        notification.save()
示例#6
0
 def check_system_generate_new_objects(self):
     sys = System.objects.first()
     now = utc_to_local(datetime.datetime.now())
     dic_sys = {}
     dic_sys[sys.type] = sys.timer
     if now >= sys.next:
         sys.last = now
         sys.next = now + relativedelta(**dic_sys)
         sys.save()
         self.generate_new_objects()
示例#7
0
def check_recurrency_transport(request, transport):
    now = utc_to_local(datetime.datetime.now())
    if now >= transport.recurrency.next:
        change_next_recurrency(transport.recurrency,
                               **get_dict_recurr_by_type(transport.type))
        pay(request, transport.maintenance_value)
        notification = EmailNotification()
        notification.player = transport.owner
        notification.message = "Maintenance for transportation #{} was paid in the amount of R$ {}".format(
            str(transport.id), str(transport.maintenance_value))
        notification.save()
示例#8
0
 def get_position_driver_current(self, travel):
     diff_total = (travel.delivery_time -
                   travel.start_travel_time).total_seconds()
     current_diff = (utc_to_local(datetime.datetime.now()) -
                     travel.start_travel_time).total_seconds()
     prop_way = current_diff / diff_total
     if travel.map_coordinates:
         array_map = json.loads(travel.map_coordinates)
         if current_diff > diff_total:
             return array_map[-1]['lat'], array_map[-1]['lng']
         index = int((len(array_map) - 1) * prop_way)
         return array_map[index]['lat'], array_map[index]['lng']
     return travel.contract.driver.lat, travel.contract.driver.lng
示例#9
0
def generate_recurrency(is_limited=False, end=None, **kwargs):
    now = utc_to_local(datetime.datetime.now())
    if end is None:
        end = {}
        keys = list(kwargs.keys())
        end[keys[0]] = kwargs[keys[0]] + 1
    recurrency = Recurrency()
    recurrency.is_limited = is_limited
    recurrency.start = now
    recurrency.end = now + relativedelta(**end)
    recurrency.next = now + relativedelta(**kwargs)
    recurrency.save()
    return recurrency
示例#10
0
def change_lat_lng_driver(contract_model, start_travel, target_addressable):
    now = datetime.datetime.now()
    diff = (utc_to_local(now) - start_travel).total_seconds()
    point_a = {'lat': contract_model.driver.lat, 'lng': contract_model.driver.lng}
    point_b = {'lat': target_addressable.lat, 'lng': target_addressable.lng}
    maneuvers = get_maneuvers(point_a, point_b)
    address_actually = check_maneuvers(maneuvers, diff)
    if address_actually:
        geoloc = geolocation(address_actually, point_a, point_b)
        if geoloc:
            actual_lat = str(geoloc['lat'])
            actual_lng = str(geoloc['lon'])
            actual_address = address_actually
            return actual_lat, actual_lng, actual_address
    return contract_model.driver.lat, contract_model.driver.lng, contract_model.driver.address
示例#11
0
 def form_valid(self, form):
     map_coordinates = self.request.POST['map_coordinates']
     self.object = form.save()
     data = form.cleaned_data.copy()
     self.object.start_travel_time = utc_to_local(datetime.datetime.now())
     self.object.collect_time = self.object.start_travel_time + datetime.timedelta(
         seconds=get_route_time(
             get_addressable(self.object.contract.driver),
             get_addressable(self.object.item_delivery),
             self.object.contract.transport))
     self.object.save()
     self.object.delivery_time = get_sum_delivery_time(self.object)
     self.object.save()
     driver = self.object.contract.driver
     driver.status_driver = STATUS_DRIVERS[0][0]
     driver.save()
     messages.success(self.request, 'Travel created with success')
     return super(CreateEnd, self).form_valid(form)
示例#12
0
 def check_collected(self, **kwargs):
     travels = Travel.objects.filter(
         contract__player=self.request.user.player, is_collected=False)
     for travel in travels:
         self.update_driver_position(travel, **kwargs)
         if utc_to_local(datetime.datetime.now()) >= travel.collect_time:
             travel.is_collected = True
             travel.save()
             driver = travel.contract.driver
             driver.lat = travel.item_delivery.lat
             driver.lng = travel.item_delivery.lng
             driver.address = travel.item_delivery.address
             driver.save()
             notification = EmailNotification()
             notification.player = driver.contract.player
             notification.message = "Delivery foi coletado por {} em {}".format(
                 str(travel.contract.driver.name),
                 str(travel.item_delivery.target.address))
             notification.save()
示例#13
0
 def handle(self, *args, **kwargs):
     Loan.objects.all().delete()
     Recurrency.objects.all().delete()
     Transport.objects.all().delete()
     Driver.objects.all().delete()
     ItemDelivery.objects.all().delete()
     Address.objects.all().delete()
     System.objects.all().delete()
     sys = System()
     now_time = utc_to_local(datetime.datetime.now())
     sys.last = now_time
     sys.save()
     dic_sys = {}
     dic_sys[sys.type] = sys.timer
     sys.next = now_time + relativedelta(**dic_sys)
     sys.save()
     for i in range(50):
         transp = Transport()
         transp.save(first_save=True)
         driver = Driver()
         driver.save(first_save=True)
         idelivr = generate_object_item_delivery()
         print(idelivr.lat, idelivr.lng)
示例#14
0
def get_seconds(value, travel=None):
    if travel:
        return (travel.delivery_time -
                utc_to_local(datetime.datetime.now())).total_seconds() * 1000
    return (value -
            utc_to_local(datetime.datetime.now())).total_seconds() * 1000
示例#15
0
def get_value_pay(loan):
    now = utc_to_local(datetime.datetime.now())
    months = calc_diff_months(loan.created_at, now)
    if months < 1:
        return loan.total_value_pay
    return ((10 - months) * loan.value_installment)
示例#16
0
def check_stop_recurrency(object):
    now = utc_to_local(datetime.datetime.now())
    if now >= object.recurrency.end:
        rec = object.recurrency
        rec.delete()
        object.delete()
示例#17
0
def timeformat(date):
    date = utc_to_local(date)
    return date.strftime("%Y-%m-%dT%H:%M:%S")