Commit 9b18475d authored by Emmanuel René Huchim Puc's avatar Emmanuel René Huchim Puc

Merge branch 'dev' of gitlab.geoint.mx:mario.chirinos/GeoInt_SIDT into dev

parents eef3c6f3 ae21d2b0
......@@ -41,6 +41,7 @@ INSTALLED_APPS = [
'django.contrib.humanize',
'catalog.apps.CatalogConfig',
'reports.apps.ReportsConfig',
'mail.apps.MailConfig',
'django_extensions',
]
......@@ -142,4 +143,13 @@ STATICFILES_DIRS = [
STATIC_URL = '/static/'
# Redirect to home URL after login (Default redirects to /accounts/profile/)
LOGIN_REDIRECT_URL = '/'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
#######################################################
# E-mail
#######################################################
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'soporte.repsat@gmail.com'
EMAIL_HOST_PASSWORD = 'soporterepsatdev'
......@@ -27,5 +27,6 @@ urlpatterns = [
url(r'^reports/', include('reports.urls')),
url(r'^$', RedirectView.as_view(url='/catalog/', permanent=True)),
url(r'^accounts/', include('django.contrib.auth.urls')),
url(r'^mail/', include('mail.urls')),
]
#+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
# + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
......@@ -11,7 +11,6 @@ class AuthRequiredMiddleware(object):
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
print(request.path_info)
print(reverse('login'))
......@@ -19,7 +18,7 @@ class AuthRequiredMiddleware(object):
# if request.path_info == reverse('ws-news-list2'):
# return response
if not request.user.is_authenticated and request.path_info != reverse('login'):
if not request.user.is_authenticated and request.path_info != reverse('login') and not request.user.is_active:
return HttpResponseRedirect(reverse('login'))
# Code to be executed for each request/response after
......
......@@ -47,6 +47,7 @@ class CartProduct(models.Model):
info = models.TextField(null=True)
purchased = models.NullBooleanField()
# -------------------------------------------------------------------------------------------
class Process(models.Model):
name = models.CharField(max_length=50)
......@@ -60,7 +61,7 @@ class Search(models.Model):
aggreg_date = models.DateTimeField(auto_now=True) # date of product aggregation
startDate = models.DateTimeField(verbose_name='Start Date')
endDate = models.DateTimeField(verbose_name='End Date')
process = models.ForeignKey(Process, on_delete=models.CASCADE, default='') #Desbloqueo cambio de Sergio
process = models.ForeignKey(Process, on_delete=models.CASCADE, default='') # Desbloqueo cambio de Sergio
clouds = models.IntegerField(default=4)
......@@ -71,4 +72,4 @@ class Purchase(models.Model):
productList = models.TextField(verbose_name="JSON Product List")
purchased = models.BooleanField(default=False)
price = models.FloatField(default=0.0)
progress = models.IntegerField(default=0,max_length=3)
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class MailConfig(AppConfig):
name = 'mail'
from django.db import models
# Create your models here.
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<!------ Include the above in your HEAD tag ---------->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>RepSat Notification</title>
<style>
{
margin: 0
;
padding: 0
;
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif
;
box-sizing: border-box
;
font-size: 14px
;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
}
table td {
vertical-align: top;
}
body {
background-color: #f6f6f6;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
clear: both !important;
}
.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}
.main {
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.header {
width: 100%;
margin-bottom: 20px;
}
.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}
.footer a {
color: #999;
}
.footer p,
.footer a,
.footer unsubscribe,
.footer td {
font-size: 12px;
}
.column-left {
float: left;
width: 50%;
}
.column-right {
float: left;
width: 50%;
}
h1,
h2,
h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #000;
margin: 40px 0 0;
line-height: 1.2;
font-weight: 400;
}
h1 {
font-size: 32px;
font-weight: 500;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 14px;
font-weight: 600;
}
p,
ul,
ol {
margin-bottom: 10px;
font-weight: normal;
}
p li,
ul li,
ol li {
margin-left: 5px;
list-style-position: inside;
}
a {
color: #348eda;
text-decoration: underline;
}
.btn-primary {
text-decoration: none;
color: #FFF;
background-color: #348eda;
border: solid #348eda;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
}
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.padding {
padding: 10px 0;
}
.aligncenter {
text-align: center;
}
.alignright {
text-align: right;
}
.alignleft {
text-align: left;
}
.clear {
clear: both;
}
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 16px;
}
.alert.alert-warning {
background: #ff9f00;
}
.alert.alert-bad {
background: #d0021b;
}
.alert.alert-good {
background: #68b90f;
}
.invoice {
margin: 40px auto;
text-align: left;
width: 80%;
}
.invoice td {
padding: 5px 0;
}
.invoice .invoice-items {
width: 100%;
}
.invoice .invoice-items td {
border-top: #eee 1px solid;
}
.invoice .invoice-items .total td {
border-top: 2px solid #333;
border-bottom: 2px solid #333;
font-weight: 700;
}
@media only screen and (max-width: 640px) {
h1, h2, h3, h4 {
font-weight: 600 !important;
margin: 20px 0 5px !important;
}
h1 {
font-size: 22px !important;
}
h2 {
font-size: 18px !important;
}
h3 {
font-size: 16px !important;
}
.container {
width: 100% !important;
}
.content,
.content-wrapper {
padding: 10px !important;
}
h3 {
font-size: 32px !important;
font-weight: bold !important;
margin-top: 0px !important;
}
.invoice {
width: 100% !important;
}
}
</style>
</head>
<body>
<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="600">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block" style="text-align:center;">
<img src="http://www.geoint.mx/images/logos/geoint2_geoint.png" width="300px">
<br>
<b style="color:#e16931; font-size: 3em;"><span style="color:#6b3721;">Rep</span>Sat</b>
<h3>Your purchase is ready</h3>
</td>
</tr>
<tr style="text-align:center">
<td class="content-block">Check your purchased products</td>
</tr>
<tr style="text-align:center">
<td class="content-block">Click on the following link to redirect to the page</td>
</tr>
<tr style="text-align:center;">
<td class="content-block">
<a href="localhost:8000">Go to the page</a>
</td>
</tr>
<tr>
</tr>
</table>
</td>
</tr>
</table>
<div class="footer">
<table width="100%">
<tr>
<td class="aligncenter content-block">
© 2019 Copyright:<a href="http://geoint.mx/"> Centro de Investigación en Ciencias de
Información Geoespacial. </a>
</td>
</tr>
</table>
</div>
</div>
</td>
<td></td>
</tr>
</table>
</body>
</html>
\ No newline at end of file
from django.test import TestCase
# Create your tests here.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.wsMail, name='wsMail'),
]
\ No newline at end of file
from django.shortcuts import render, redirect
# Create your views here.
# -*- coding: utf-8 -*-
from django.core.mail import EmailMultiAlternatives
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from GeoInt_SIDT import settings
from GeoInt_SIDT.settings import BASE_URL
def wsMail(request):
subject = 'Info RepSat'
email_from = settings.EMAIL_HOST_USER
recipient_list = ['isanchez@centrogeo.edu.mx', 'ldominguez@centrogeo.edu.mx', 'ehuchim@centrogeo.edu.mx']
html_content = render_to_string('mail_notification.html', {'varname': BASE_URL }) # render with dynamic value
text_content = strip_tags(html_content) # Strip the html tag. So people can see the pure text at least.
# create the email, and attach the HTML version as well.
msg = EmailMultiAlternatives(subject, text_content, email_from, recipient_list)
msg.attach_alternative(html_content, "text/html")
msg.send()
return redirect('../catalog')
\ No newline at end of file
......@@ -7,10 +7,11 @@ function openmodal(info) {
function refresh() {
$.ajax({
dataType: "json",
url: 'Reload',
url: '../reports/ws/process_progress',
success: function (data) {
$.each(data, function (key, val) {
console.log(key + " = purchase_id: " + val.purchase_id + ", val_progress: " + val.progress);
console.log(key+ " purchase_id:"+val.purchase_id+", progress: "+val.progress);
if (val.progress != 100) {
$('#progress_bar' + val.purchase_id).attr("aria-valuenow", val.progress);
$('#progress_bar' + val.purchase_id).attr('style', 'width:' + val.progress + '%');
......@@ -89,9 +90,7 @@ $(document).ready(function () {
}],
order: [1, 'asc']
});
});
});
$(function () {
......
......@@ -157,14 +157,14 @@
class="progress-bar progress-bar-warning progress-bar-striped active"
aria-valuemin="0" aria-valuemax="100"
style="width:{{ product.progress }}%">
<p class="text-center" style="color: #0a0a0a"
id="progess_value{{ product.purchase_id }}">
<p style="color: #0a0a0a">
Downloading
</p>
</div>
</div>
<div id="action_buttons{{ product.purchase_id }}" {% if product.progress != 100 %}
class="hidden" {% endif %}>
<a id="view_report{{ product.purchase_id }}" title="View Report"
<a title="View Report"
href="../reports/T15QZD_sclData/{{ product.purchase_id }}"
class="btn btn-success">
<i class="fa fa-eye"></i>
......@@ -229,7 +229,6 @@
</div>
<!-- /.modals -->
{% endblock %}
{% block scripts %}
<script src="{% static 'reports/js/scripts.js' %}"></script>
<script src="{% static 'reports/js/Reports_scripts.js' %}"></script>
{% endblock %}
\ No newline at end of file
......@@ -7,6 +7,6 @@ urlpatterns = [
url(r'^(?P<report>[\w\-]+)/(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'),
url(r'^$', views.Reports, name='reports'),
url(r'^Reload$', views.Reload, name='Reload'),
url(r'^ws/process_progress$', views.wsProcessProgress, name='wsProcessProgress'),
]
......@@ -96,6 +96,9 @@ def Reports(request):
#####################################################
# progress bar #
#####################################################
if os.stat(log_info).st_size == 0:
progress = 0
else:
if 'Linking Products...' in open(log_info).read():
progress = 20
if 'Merging Images...' in open(log_info).read():
......@@ -129,7 +132,10 @@ def Reports(request):
"progress": progress,
"log_info": log,
})
size = 0
final_size = 0
log_info = ""
progress = 0
##############################################
# paginacion #
##############################################
......@@ -141,19 +147,22 @@ def Reports(request):
# ------------------------------------------------------------------------
def Reload(request):
def wsProcessProgress(request):
if request.is_ajax():
progress = 0
productList2 = []
product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds',
'search__startDate', 'search__endDate',
'search__process_id__name').filter(user_id=request.user.id, purchased=1)
'search__process_id__name', 'progress').filter(user_id=request.user.id, purchased=1)
for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
#####################################################
# progress bar #
#####################################################
if os.stat(log_info).st_size == 0:
progress = 0
else:
if 'Linking Products...' in open(log_info).read():
progress = 20
if 'Merging Images...' in open(log_info).read():
......@@ -165,10 +174,22 @@ def Reload(request):
if 'Finalizing...' in open(log_info).read():
progress = 100
productList2.append({
"purchase_id": producto['id'],
"progress": progress,
})
progress = 0
log_info = ""
# productList2 = []
# product_list = Purchase.objects.values('id', 'progress').filter(user_id=request.user.id, purchased=1)
# for producto in product_list:
# productList2.append({
# "purchase_id": producto['id'],
# "progress": producto['progress'],
# })
return HttpResponse(json.dumps(productList2))
else:
raise Http404
......
......@@ -2,16 +2,17 @@
{% load static %}
{% block headMedia %}
<link rel="stylesheet" href="{% static 'catalog/css/login.css'%}" type="text/css">
<link rel="stylesheet" href="{% static 'catalog/css/login.css' %}" type="text/css">
{% endblock %}
{% block budy %}
<div class="visible-lg-block visible-md-block">
<video id="bgvid" playsinline autoplay muted loop poster="{% static 'images/poster.jpg'%}" >
<video id="bgvid" playsinline autoplay muted loop poster="{% static 'images/poster.jpg' %}">
<!-- WCAG general accessibility recommendation is that media such as background video play through only once. Loop turned on for the purposes of illustration; if removed, the end of the video will fade in the same way created by pressing the "Pause" button -->
<source src="{% static 'catalog/images/background.mp4'%}" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />
<source src="{% static 'catalog/images/background.ogv'%}" type='video/ogg; codecs="theora, vorbis"' />
<source src="{% static 'catalog/images/background.webm'%}" type='video/webm; codecs="vp8, vorbis"' />
<source src="{% static 'catalog/images/background.mp4' %}"
type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'/>
<source src="{% static 'catalog/images/background.ogv' %}" type='video/ogg; codecs="theora, vorbis"'/>
<source src="{% static 'catalog/images/background.webm' %}" type='video/webm; codecs="vp8, vorbis"'/>
</video>
</div>
......@@ -32,7 +33,8 @@
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed, please login with an account that has access.</p>
<p>Your account doesn't have access to this page. To proceed, please login with an account that has
access.</p>
{% else %}
<p>Favor de firmarse para tener acceso.</p>
{% endif %}
......@@ -42,13 +44,15 @@
<form role="form" method="post" action="{% url 'login' %}">
{% csrf_token %}
<div class="form-group has-feedback">
<!-- <input type="text" class="form-control" placeholder="username">-->
<input class="form-control" placeholder="nombre de usuario" name="{{ form.username.name }}" type="{{ form.username.class.name}}" id="{{ form.username.auto_id }}" autofocus>
<!-- <input type="text" class="form-control" placeholder="username">-->
<input class="form-control" placeholder="nombre de usuario" name="{{ form.username.name }}"
type="{{ form.username.class.name }}" id="{{ form.username.auto_id }}" autofocus>
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<!-- <input type="password" class="form-control" placeholder="assword">-->
<input class="form-control" placeholder="contraseña" name="{{ form.password.name }}" type="password" id="{{ form.password.auto_id }}" autofocus>
<!-- <input type="password" class="form-control" placeholder="assword">-->
<input class="form-control" placeholder="contraseña" name="{{ form.password.name }}" type="password"
id="{{ form.password.auto_id }}" autofocus>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
......@@ -71,11 +75,12 @@
</div>
<!-- /.login-box -->
<div class="row geointInfo" >
<div class="row geointInfo">
<div class="col-md-12">
<a href="http://www.centrogeo.org.mx/">© 2018 Centro de Investigación en Ciencias de Información Geoespacial</a>
<a href="http://www.centrogeo.org.mx/">© 2018 Centro de Investigación en Ciencias de Información
Geoespacial</a>
</div>
......@@ -89,20 +94,17 @@
var vid = document.getElementById("bgvid");
if (window.matchMedia('(prefers-reduced-motion)').matches)
{
if (window.matchMedia('(prefers-reduced-motion)').matches) {
vid.removeAttribute("autoplay");
vid.pause();
pauseButton.innerHTML = "Paused";
}
function vidFade()
{
function vidFade() {
vid.classList.add("stopfade");
}
vid.addEventListener('ended', function()
{
vid.addEventListener('ended', function () {
// only functional if "loop" is removed
vid.pause();
// to capture IE10
......@@ -110,6 +112,5 @@
});
</script>
{% endblock %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment