yuyu_dashboard/yuyu/admin/price_configuration/views.py

379 lines
14 KiB
Python
Raw Normal View History

2022-05-13 14:01:58 +07:00
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from django.urls import reverse_lazy, reverse
from django.utils.translation import ugettext_lazy as _
from neutronclient.common import exceptions as neutron_exc
from horizon import exceptions, tabs
from horizon import forms
from openstack_dashboard import api
from openstack_dashboard.dashboards.yuyu.cases.flavor_price_use_case import FlavorPriceUseCase
from openstack_dashboard.dashboards.yuyu.cases.floating_ip_price_use_case import FloatingIpPriceUseCase
from openstack_dashboard.dashboards.yuyu.cases.volume_price_use_case import VolumePriceUseCase
from openstack_dashboard.dashboards.yuyu.cases.router_price_use_case import RouterPriceUseCase
from openstack_dashboard.dashboards.yuyu.cases.snapshot_price_use_case import SnapshotPriceUseCase
from openstack_dashboard.dashboards.yuyu.cases.image_price_use_case import ImagePriceUseCase
from .forms import FlavorPriceForm, VolumePriceForm, FloatingIpPriceForm, RouterPriceForm, SnapshotPriceForm, ImagePriceForm
from .tabs import PriceConfigurationTabs
from ...core.utils.price_checker import has_missing_price
class IndexView(tabs.TabbedTableView):
tab_group_class = PriceConfigurationTabs
page_title = _("Price Configuration")
template_name = "admin/price_configuration/index.html"
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['missing_price'] = has_missing_price(self.request)
return context
class FlavorPriceAddFormView(forms.ModalFormView):
form_class = FlavorPriceForm
form_id = "flavor_price_form"
page_title = _("Create Flavor Price")
submit_label = _("Create Flavor Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:flavor_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_flavor.html'
flavor_price_uc = FlavorPriceUseCase()
def get_object_display(self, obj):
return obj.flavor_id
def get_initial(self):
added_ids = []
flavors = []
try:
2022-06-10 14:10:14 +07:00
added_ids = list(map(lambda x: x['flavor_id'], self.flavor_price_uc.list(self.request)))
2022-05-13 14:01:58 +07:00
flavors = api.nova.flavor_list(self.request)
except neutron_exc.ConnectionFailed:
exceptions.handle(self.request)
except Exception:
exceptions.handle(self.request,
_("Unable to retrieve flavors."))
flavor_list = []
for flavor in flavors:
if flavor.id not in added_ids:
flavor_list.append((flavor.id, flavor.name))
if not flavor_list:
2022-06-10 14:10:14 +07:00
flavor_list = [('', _("No flavors available"))]
2022-05-13 14:01:58 +07:00
return {'flavor_list': flavor_list}
class FlavorPriceUpdateFormView(forms.ModalFormView):
form_class = FlavorPriceForm
form_id = "flavor_price_form_update"
page_title = _("Flavor Price")
submit_label = _("Update Flavor Price")
submit_url = "horizon:admin:price_configuration:flavor_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_flavor.html'
flavor_price_uc = FlavorPriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.flavor_id
def get_initial(self):
try:
flavor_price = self.flavor_price_uc.get(self.request, self.kwargs['id'])
except Exception:
flavor_price = None
exceptions.handle(self.request,
_("Unable to retrieve flavor price."))
return {
'model_id': flavor_price['id'],
'flavor_list': [(flavor_price['flavor_id'], flavor_price['name'])],
'hourly_price': flavor_price['hourly_price'],
'monthly_price': flavor_price['monthly_price']
}
class VolumePriceAddFormView(forms.ModalFormView):
form_class = VolumePriceForm
form_id = "volume_price_form"
page_title = _("Create Volume Price")
submit_label = _("Create Volume Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:volume_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_volume.html'
volume_price_uc = VolumePriceUseCase()
def get_object_display(self, obj):
return obj.volume_type_id
def get_initial(self):
added_ids = []
volumes = []
try:
2022-06-10 14:10:14 +07:00
added_ids = list(map(lambda x: x['volume_type_id'], self.volume_price_uc.list(self.request)))
2022-05-13 14:01:58 +07:00
volumes = api.cinder.volume_type_list(self.request)
except neutron_exc.ConnectionFailed:
exceptions.handle(self.request)
except Exception:
exceptions.handle(self.request,
_("Unable to retrieve volumes."))
volume_list = []
for d in volumes:
if d.id not in added_ids:
volume_list.append((d.id, d.name))
if not volume_list:
2022-06-10 14:10:14 +07:00
volume_list = [('', _("No volume type available"))]
2022-05-13 14:01:58 +07:00
return {'volume_type_list': volume_list}
class VolumePriceUpdateFormView(forms.ModalFormView):
form_class = VolumePriceForm
form_id = "volume_price_form_update"
page_title = _("Volume Price")
submit_label = _("Update Volume Price")
submit_url = "horizon:admin:price_configuration:volume_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_volume.html'
volume_price_uc = VolumePriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.volume_type_id
def get_initial(self):
try:
volume = self.volume_price_uc.get(self.request, self.kwargs['id'])
except Exception:
volume = None
exceptions.handle(self.request,
_("Unable to retrieve volume price."))
return {
'model_id': volume['id'],
'volume_type_list': [(volume['volume_type_id'], volume['name'])],
'hourly_price': volume['hourly_price'],
'monthly_price': volume['monthly_price']
}
class FloatingIpPriceAddFormView(forms.ModalFormView):
form_class = FloatingIpPriceForm
form_id = "floating_ip_price_form"
page_title = _("Create Floating IP Price")
submit_label = _("Create Floating IP Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:floating_ip_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_floating_ip.html'
def get_object_display(self, obj):
return obj.id
class FloatingIpPriceUpdateFormView(forms.ModalFormView):
form_class = FloatingIpPriceForm
form_id = "floating_ip_price_form_update"
page_title = _("Floating IP Price")
submit_label = _("Update Floating IP Price")
submit_url = "horizon:admin:price_configuration:floating_ip_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_floating_ip.html'
fip_price_uc = FloatingIpPriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.id
def get_initial(self):
try:
volume = self.fip_price_uc.get(self.request, self.kwargs['id'])
except Exception:
volume = None
exceptions.handle(self.request,
_("Unable to retrieve floating ip price."))
return {
'model_id': volume['id'],
'hourly_price': volume['hourly_price'],
'monthly_price': volume['monthly_price']
}
class RouterPriceAddFormView(forms.ModalFormView):
form_class = RouterPriceForm
form_id = "router_price_form"
page_title = _("Create Router Price")
submit_label = _("Create Router Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:router_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_router.html'
def get_object_display(self, obj):
return obj.id
class RouterPriceUpdateFormView(forms.ModalFormView):
form_class = RouterPriceForm
form_id = "router_price_form_update"
page_title = _("Router Price")
submit_label = _("Update Router Price")
submit_url = "horizon:admin:price_configuration:router_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_router.html'
price_uc = RouterPriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.id
def get_initial(self):
try:
volume = self.price_uc.get(self.request, self.kwargs['id'])
except Exception:
volume = None
exceptions.handle(self.request,
_("Unable to retrieve router price."))
return {
'model_id': volume['id'],
'hourly_price': volume['hourly_price'],
'monthly_price': volume['monthly_price']
}
class SnapshotPriceAddFormView(forms.ModalFormView):
form_class = SnapshotPriceForm
form_id = "snapshot_form"
page_title = _("Create Snapshot Price")
submit_label = _("Create Snapshot Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:snapshot_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_snapshot.html'
def get_object_display(self, obj):
return obj.id
class SnapshotPriceUpdateFormView(forms.ModalFormView):
form_class = SnapshotPriceForm
form_id = "snapshot_form_update"
page_title = _("Snapshot Price")
submit_label = _("Update Snapshot Price")
submit_url = "horizon:admin:price_configuration:snapshot_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_snapshot.html'
price_uc = SnapshotPriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.id
def get_initial(self):
try:
volume = self.price_uc.get(self.request, self.kwargs['id'])
except Exception:
volume = None
exceptions.handle(self.request,
_("Unable to retrieve snapshot price."))
return {
'model_id': volume['id'],
'hourly_price': volume['hourly_price'],
'monthly_price': volume['monthly_price']
}
class ImagePriceAddFormView(forms.ModalFormView):
form_class = ImagePriceForm
form_id = "snapshot_form"
page_title = _("Create Image Price")
submit_label = _("Create Image Price")
submit_url = reverse_lazy("horizon:admin:price_configuration:image_price_create")
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_image.html'
def get_object_display(self, obj):
return obj.id
class ImagePriceUpdateFormView(forms.ModalFormView):
form_class = ImagePriceForm
form_id = "image_form_update"
page_title = _("Image Price")
submit_label = _("Update Image Price")
submit_url = "horizon:admin:price_configuration:image_price_update"
success_url = reverse_lazy("horizon:admin:price_configuration:index")
template_name = 'admin/price_configuration/create_image.html'
price_uc = ImagePriceUseCase()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
args = (self.kwargs['id'],)
context['submit_url'] = reverse(self.submit_url, args=args)
return context
def get_object_display(self, obj):
return obj.id
def get_initial(self):
try:
volume = self.price_uc.get(self.request, self.kwargs['id'])
except Exception:
volume = None
exceptions.handle(self.request,
_("Unable to retrieve image price."))
return {
'model_id': volume['id'],
'hourly_price': volume['hourly_price'],
'monthly_price': volume['monthly_price']
}